none
Não estou conseguindo fazer.. RRS feed

  • Pergunta

  • Olá a todos...


    Sou iniciante em SQL Server e estou tentando criar uma consulta a partir de uma tabela mas não estou conseguindo obter o resultado esperado. Minha tabela tem os seguintes dados:

    qtd_cod       qtd_ano       qtd_mes       qtd_val

        947           2007                1               13
        948           2007                2               14
        949           2007                3               15
        957           2007                4               41
        958           2007                5                5
        965           2007               12              12
        973           2003                1               22
        974           2003                2               55
        975           2003                3               88
        976           2003                4               90
        987           2004                3                8
        988           2004                4                9
        989           2004                5               10
        990           2004                6                5
        999           2006                8               20

    Preciso retornar a consulta com esse resultado na tela:

    Ano      JAN   FEV   MAR   ABR   MAI   JUN   JUL   AGO   SET   OUT   NOV   DEZ

    2003      22      55       88       90       --        --      --        --        --       --        --         --
    2004      --       --         8         9        10       5       --        --        --       --        --         --
    2006      --       --        --        --        --        --      --        20       --       --        --         --
    2007     13      14        15       41       5         --      --        --        --       --        --         12


    Como vou agrupar pelo ano e colocar essas colunas JAN, FEV....

    Eu tentei fazer uma query mas não consegui..minha query ficou assim:

    SELECT
        distinct qtd_ano,
        CASE WHEN qtd_mes = 1 THEN qtd_val ELSE '--' END AS [JAN],
        CASE WHEN qtd_mes = 2 THEN qtd_val ELSE '--' END AS [FEV],
        CASE WHEN qtd_mes = 3 THEN qtd_val ELSE '--' END AS [MAR],
        CASE WHEN qtd_mes = 4 THEN qtd_val ELSE '--' END AS [ABR],
        CASE WHEN qtd_mes = 5 THEN qtd_val ELSE '--' END AS [MAI],
        CASE WHEN qtd_mes = 6 THEN qtd_val ELSE '--' END AS [JUN],
        CASE WHEN qtd_mes = 7 THEN qtd_val ELSE '--' END AS [JUL],
        CASE WHEN qtd_mes = 8 THEN qtd_val ELSE '--' END AS [AGO],
        CASE WHEN qtd_mes = 8 THEN qtd_val ELSE '--' END AS [SET],
        CASE WHEN qtd_mes = 10 THEN qtd_val ELSE '--' END AS [OUT],
        CASE WHEN qtd_mes = 11 THEN qtd_val ELSE '--' END AS [NOV],
        CASE WHEN qtd_mes = 12 THEN qtd_val ELSE '--' END AS [DEZ]
    FROM
            TQuantidade

    E o resultado obtido dessa query foi esse:

    Ano    JAN   FEV  MAR  ABR  MAI  JUN  JUL  AGO  SET  OUT   NOV   DEZ
    2003    --       --       --      90      --       --      --      --       --      --         --        --
    2003    --       --       88      --      --       --      --      --       --      --         --        --
    2003    --      55       --       --      --       --      --      --       --      --         --        --
    2003    22      --       --       --      --       --      --      --       --      --         --        --
    2004    --       --       --       --      --       5       --      --       --      --         --        --
    2004    --       --       --       --     10       --      --      --       --      --         --        --
    2004    --       --       --       9       --       --      --      --       --      --         --        --
    2004    --       --       8        --      --       --      --      --       --      --         --        --
    2006    --       --       --       --      --       --      --      20      --      --         --        --
    2007    --       --       --       --      --       --      --      --       --      --         --        --
    2007    --       --       --       --      --       --      --      --       --      --         --        12
    2007    --       --       --       --      5        --      --      --       --      --         --        --
    2007    --       --       --       41     --       --      --      --       --      --         --        --
    2007    --       --      15       --      --       --      --      --       --      --         --        --
    2007    --       14      --       --      --       --      --      --       --      --         --        --
    2007    13      --       --       --      --       --      --      --       --      --         --        --

    Me ajudem..já não sei mais o que fazer...



    quinta-feira, 15 de março de 2007 12:13

Respostas

  • tenta assim


    Select qtd_ano,
    sum([JAN]) as [JAN],
    sum([FEV]) as [FEV],
    sum([MAR]) as [MAR],
    sum([ABR]) as [ABR],
    sum([MAI]) as [MAI],
    sum([JUN]) as [JUN],
    sum([JUL]) as [JUL],
    sum([AGO]) as [AGO],
    sum([SET]) as [SET],
    sum([OUT]) as [OUT],
    sum([NOV]) as [NOV],
    sum([DEZ]) as [DEZ]
    From (
    SELECT
        distinct qtd_ano,
        CASE WHEN qtd_mes = 1 THEN qtd_val ELSE '--' END AS [JAN],
        CASE WHEN qtd_mes = 2 THEN qtd_val ELSE '--' END AS [FEV],
        CASE WHEN qtd_mes = 3 THEN qtd_val ELSE '--' END AS [MAR],
        CASE WHEN qtd_mes = 4 THEN qtd_val ELSE '--' END AS [ABR],
        CASE WHEN qtd_mes = 5 THEN qtd_val ELSE '--' END AS [MAI],
        CASE WHEN qtd_mes = 6 THEN qtd_val ELSE '--' END AS [JUN],
        CASE WHEN qtd_mes = 7 THEN qtd_val ELSE '--' END AS [JUL],
        CASE WHEN qtd_mes = 8 THEN qtd_val ELSE '--' END AS [AGO],
        CASE WHEN qtd_mes = 8 THEN qtd_val ELSE '--' END AS [SET],
        CASE WHEN qtd_mes = 10 THEN qtd_val ELSE '--' END AS [OUT],
        CASE WHEN qtd_mes = 11 THEN qtd_val ELSE '--' END AS [NOV],
        CASE WHEN qtd_mes = 12 THEN qtd_val ELSE '--' END AS [DEZ]
    FROM
            TQuantidade) Drv

    se quizer fazer dimanico veja mais em:

    http://www.forumweb.com.br/artigos/artigos.php?action=file&id=324

    quinta-feira, 15 de março de 2007 12:22

Todas as Respostas

  • tenta assim


    Select qtd_ano,
    sum([JAN]) as [JAN],
    sum([FEV]) as [FEV],
    sum([MAR]) as [MAR],
    sum([ABR]) as [ABR],
    sum([MAI]) as [MAI],
    sum([JUN]) as [JUN],
    sum([JUL]) as [JUL],
    sum([AGO]) as [AGO],
    sum([SET]) as [SET],
    sum([OUT]) as [OUT],
    sum([NOV]) as [NOV],
    sum([DEZ]) as [DEZ]
    From (
    SELECT
        distinct qtd_ano,
        CASE WHEN qtd_mes = 1 THEN qtd_val ELSE '--' END AS [JAN],
        CASE WHEN qtd_mes = 2 THEN qtd_val ELSE '--' END AS [FEV],
        CASE WHEN qtd_mes = 3 THEN qtd_val ELSE '--' END AS [MAR],
        CASE WHEN qtd_mes = 4 THEN qtd_val ELSE '--' END AS [ABR],
        CASE WHEN qtd_mes = 5 THEN qtd_val ELSE '--' END AS [MAI],
        CASE WHEN qtd_mes = 6 THEN qtd_val ELSE '--' END AS [JUN],
        CASE WHEN qtd_mes = 7 THEN qtd_val ELSE '--' END AS [JUL],
        CASE WHEN qtd_mes = 8 THEN qtd_val ELSE '--' END AS [AGO],
        CASE WHEN qtd_mes = 8 THEN qtd_val ELSE '--' END AS [SET],
        CASE WHEN qtd_mes = 10 THEN qtd_val ELSE '--' END AS [OUT],
        CASE WHEN qtd_mes = 11 THEN qtd_val ELSE '--' END AS [NOV],
        CASE WHEN qtd_mes = 12 THEN qtd_val ELSE '--' END AS [DEZ]
    FROM
            TQuantidade) Drv

    se quizer fazer dimanico veja mais em:

    http://www.forumweb.com.br/artigos/artigos.php?action=file&id=324

    quinta-feira, 15 de março de 2007 12:22
  • Gostaria de agradecer a todos que me responderam e a você Marcelo..pois seu post me ajudou muito..só mais uma dúvida:

    E se eu quizer fazer filtros nessa consulta..por exemplo:

    Filtrar o Período de  ABR de 2003 até OUT de 2006?

    Ou seja ele exibiria para mim somente as os anos entre o período de anos (2003 á 2006) e o período de meses..mas na exibição pode aparecer os outros meses porém exibi com valor "0"..

    Qtd_ano      JAN    FEV     MAR     ABR    MAI     JUN     JUL     AGO   SET     OUT    NOV     DEZ
       2003         0        0        0        90       45       75      65       35      41       41       52       55
       2004         5       20        8         9        10       5        3         6        7         9        11       12
       2006         0        0         0         0         0        0        0        20       0        0         0         0

    Entedeu?
    quinta-feira, 15 de março de 2007 13:11
  • Bom dia, baseado no exemplo do Marcelo você poderia criar uma function para fazer as checagens dos meses utilizando um Case, e o ano vc pode filtrar normalmente através da cláusula Where

     

    Espero ter ajudado

    quinta-feira, 15 de março de 2007 13:28
  •  

      Bom neste caso eu acho melhor vc. avaliar o exemplo do site que enviei, ele faz isso dinamico asssim vc. passa as datas e ele gera a pivot para vc.

     

    Abs;

     

    quinta-feira, 15 de março de 2007 13:28