none
CONSULTA SQL RRS feed

  • Pergunta

  • Bom dia, gostaria de saber se era possível realizar uma consulta na mesma tabela, retornando registros alinhado pelo criterio de data, o layout das colunas é pra ficar um modelo comparativo.

    Na minha tabela eu tenho as seguintes colunas:

    ID    UF    DATA         Valor

    1     CE    17/10/16   100,00

    2     AC    18/11/16   200,00

    3     BA    18/11/16   300,00

    queria saber se é possível deixar esses dados dessa tabela nesse modelo de layout abaixo:

    UF   ValorData1(17/10/16)       ValorData2(18/10/16)

    CE   100,00                              Null          --> Só teve valor na data1

    AC   Null                                   200,00     --> Só teve valor na data2

    BA   Null                                   300,00     --> Só teve valor na data2

    Alguém tem ideia como se faz essa consulta, me passa a dica aí por favor...

    quarta-feira, 19 de outubro de 2016 13:13

Respostas

Todas as Respostas

  • Bom dia,

    Pra conseguir essa transposição de linha em coluna você pode usar o recurso de PIVOT do SQL Server. Veja um tutorial aqui: http://www.devmedia.com.br/pivot-no-sql-server-invertendo-linhas-e-colunas-em-um-exemplo-real/28318


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quarta-feira, 19 de outubro de 2016 13:41
  • Para fazer isso, vc vai manipular pivot 

    fiz um exemplo com seus dados,

    D    UF    DATA         Valor

    1     CE    17/10/16   100,00

    2     AC    18/11/16   200,00

    3     BA    18/11/16   300,00

    CREATE TABLE [dbo].[RespostaForum]
    (
    [ID] [int] NOT NULL IDENTITY(1, 1),
    [UF] [char] (2) COLLATE Latin1_General_CI_AI NULL,
    [DATA] [date] NULL,
    [Valor] [decimal] (18, 2) NULL
    ) ON [PRIMARY]
    GO
    
    DECLARE @cols NVARCHAR (MAX)
    
    SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR, [DATA], 106) + ']', 
                   '[' + CONVERT(NVARCHAR, [DATA], 106) + ']')
                   FROM    (SELECT DISTINCT [DATA] FROM RespostaForum) PV  
                   ORDER BY [DATA]
    
    
    
    
    DECLARE @query NVARCHAR(MAX)
    SET @query = '           
                  SELECT * FROM 
                 (
                     SELECT * FROM RespostaForum
                 ) x
                 PIVOT 
                 (
                     SUM(Valor)
                     FOR [DATA] IN (' + @cols + ')
                ) p      
    
                '     
    EXEC SP_EXECUTESQL @query


    Wesley Neves

    quarta-feira, 19 de outubro de 2016 13:50