none
Transformar linha em colunas RRS feed

  • Pergunta

  • Bom dia pessoal, eu dei uma pesquisada e achei mto material de como transformar linhas em colunas mas não esta dando mto certo, eu não sei se pq uso o sql 2012... eu tenho a seguinte tabela...

    ID        ID_Item    Nome_Item      Ano    Total

    1          12345       Nome-1           2012   45,23

    2          23456       Nome-2           2013   26,35

    O Select de filtro eu fiz e esta certo mas qdo eu tento colocar um pivolt ele aparece um erro..

    SELECT DISTINCT S.ID, S.ID_Item, C.Nome_Item, S.[Ano], S.Total  
    FROM church.Subvention AS S INNER JOIN v_Church_2 AS C ON S.ID_Item COLLATE SQL_Latin1_General_CP1_CI_AS = C.Srk_Igreja  
    WHERE  S.ID_Item = '12345' ORDER BY C.Nome_Item

    ID        ID_Item    Nome_Item      Ano    Total

    1          12345       Nome-1           2012   45,23

    2          12345       Nome-1           2013   26,35

    Agora eu gostaria de inserir um pivolt (Ou algo parecido) que inverta só as linhas Ano em colunas ex.:

    2012        2013

    45,23       26,35

    56,32       26,35

    Alguém consegue me dar um help? vlw...

    segunda-feira, 24 de junho de 2013 13:50

Respostas

  • Jhonas

    você precisa usar o Pivot, veja exemplo abaixo

    ;with cte_Dados as
    (
     SELECT DISTINCT S.ID, S.ID_Item, C.Nome_Item, S.[Ano], S.Total  
     FROM church.Subvention AS S INNER JOIN v_Church_2 AS C ON S.ID_Item COLLATE SQL_Latin1_General_CP1_CI_AS = C.Srk_Igreja  
     WHERE  S.ID_Item = '12345' 
     )
     
    SELECT ID_Item, Nome_Item, [2012] AS '2012', [2013] AS '2013'
    FROM 
    (SELECT ID_Item, Nome_Item, Ano, Total
    FROM cte_Dados) AS p
    PIVOT
    (
    sum (Total)
    FOR Ano IN
    ( [2012], [2013])
    ) AS pvt
    ORDER BY ID_Item;


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS, MCITP, MCT.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    • Marcado como Resposta Jhonas Nobre segunda-feira, 24 de junho de 2013 16:09
    • Não Marcado como Resposta Jhonas Nobre segunda-feira, 24 de junho de 2013 16:09
    • Marcado como Resposta Jhonas Nobre segunda-feira, 24 de junho de 2013 16:26
    segunda-feira, 24 de junho de 2013 14:17
    Moderador

Todas as Respostas

  • Jhonas

    você precisa usar o Pivot, veja exemplo abaixo

    ;with cte_Dados as
    (
     SELECT DISTINCT S.ID, S.ID_Item, C.Nome_Item, S.[Ano], S.Total  
     FROM church.Subvention AS S INNER JOIN v_Church_2 AS C ON S.ID_Item COLLATE SQL_Latin1_General_CP1_CI_AS = C.Srk_Igreja  
     WHERE  S.ID_Item = '12345' 
     )
     
    SELECT ID_Item, Nome_Item, [2012] AS '2012', [2013] AS '2013'
    FROM 
    (SELECT ID_Item, Nome_Item, Ano, Total
    FROM cte_Dados) AS p
    PIVOT
    (
    sum (Total)
    FOR Ano IN
    ( [2012], [2013])
    ) AS pvt
    ORDER BY ID_Item;


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS, MCITP, MCT.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    • Marcado como Resposta Jhonas Nobre segunda-feira, 24 de junho de 2013 16:09
    • Não Marcado como Resposta Jhonas Nobre segunda-feira, 24 de junho de 2013 16:09
    • Marcado como Resposta Jhonas Nobre segunda-feira, 24 de junho de 2013 16:26
    segunda-feira, 24 de junho de 2013 14:17
    Moderador
  • Deu certo Marcelo,

    vlw...

    segunda-feira, 24 de junho de 2013 16:26
  • Marcelo bom dia,

    Tem outra forma de se fazer isso sem o utilizar o PIVOT? Porque meu SGBD utiliza compatibilidade 80, e não tem suporte para esse comando.

    Atenciosamente,

    Emerson

    segunda-feira, 22 de fevereiro de 2016 15:35
  • Emerson

    Se seu SQL for >= SQL 2008, acredito que vale a pena você avaliar a possibilidade de elevar o Compatibility Level.

    mas de todo o modo segue um artigo com um exemplo para fazer pivot sem uasr a função pivot do SQL

    http://www.devmedia.com.br/pivot-table-no-sql-server/5292


    Att.
    Marcelo Fernandes
    MCP, MCDBA, MCSA, MCTS, MCITP, MCT e MVP.
    Se Útil, classifique!!!
    Me siga no twitter: @marcelodba

    segunda-feira, 22 de fevereiro de 2016 16:37
    Moderador