none
Montar Select RRS feed

  • Pergunta

  • Pessoal,

    Tenho 4 tabelas (tabela2011, tabela2010, tabela2009 e tabela2008) com os mesmos campos em cada (empresa, ano, trimestre, valor). Preciso fazer um select para mostrar os seguintes dados:

    exemples de dados de uma tabela

    Empresa   |  Ano   | Trimestre   | Valor

    Vale          | 2010  | 1               | 2.000,00

    Vale          | 2010  | 2               | 3.000,00

    Preciso montar uma select que retorne as seguintes colunas

    Empresa | Valor2010_Trimestre1 | Valor2010_Trimestre2 | Valor2010_Trimestre3 | Valor2011_Trimestre1 | Valor2011_Trimestre2 | Valor2011_Trimestre3

    sENDO QUE Valor2010_Trimestre1 não existe em nenhuma das tabelas, teria que ser um where com trimestre = 1 ou 2 ou 3 e ano = 2010....

    Entenderam?


    Luiz Henroqie

    quarta-feira, 16 de janeiro de 2013 21:17

Respostas

  • Olá luiz,

    A forma que vou colocar abaixo ,não seria a melhor ,mas resolveria seu problema. Basta adicionar agora , as unions para as tabelas 2009 e 2008.

    SELECT  X.EMPRESA
           ,SUM(X.VALOR2011_TRIMESTRE1) AS VALOR2011_TRIMESTRE1
           ,SUM(X.VALOR2011_TRIMESTRE2) AS VALOR2011_TRIMESTRE2
           ,SUM(X.VALOR2011_TRIMESTRE3) AS VALOR2011_TRIMESTRE3
           ,SUM(X.VALOR2011_TRIMESTRE4) AS VALOR2011_TRIMESTRE4
      ,SUM(X.VALOR2010_TRIMESTRE1) AS VALOR2010_TRIMESTRE1
      ,SUM(X.VALOR2010_TRIMESTRE2) AS VALOR2010_TRIMESTRE2
      ,SUM(X.VALOR2010_TRIMESTRE3) AS VALOR2010_TRIMESTRE3
      ,SUM(X.VALOR2010_TRIMESTRE4) AS VALOR2010_TRIMESTRE4
      ,SUM(X.VALOR2009_TRIMESTRE1) AS VALOR2009_TRIMESTRE1
      ,SUM(X.VALOR2009_TRIMESTRE2) AS VALOR2009_TRIMESTRE2
      ,SUM(X.VALOR2009_TRIMESTRE3) AS VALOR2009_TRIMESTRE3
      ,SUM(X.VALOR2009_TRIMESTRE4) AS VALOR2009_TRIMESTRE4
      ,SUM(X.VALOR2008_TRIMESTRE1) AS VALOR2008_TRIMESTRE1
      ,SUM(X.VALOR2008_TRIMESTRE2) AS VALOR2008_TRIMESTRE2
      ,SUM(X.VALOR2008_TRIMESTRE3) AS VALOR2008_TRIMESTRE3
      ,SUM(X.VALOR2008_TRIMESTRE4) AS VALOR2008_TRIMESTRE4
      FROM (   
                              
    SELECT A.EMPRESA  AS EMPRESA
           ,SUM(CASE WHEN A.TRIMESTRE = 1 AND A.ANO = 2011
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2011_TRIMESTRE1
           ,SUM(CASE WHEN A.TRIMESTRE = 2 AND A.ANO = 2011
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2011_TRIMESTRE2
           ,SUM(CASE WHEN A.TRIMESTRE = 3 AND A.ANO = 2011
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2011_TRIMESTRE3
          ,SUM(CASE WHEN A.TRIMESTRE = 4 AND A.ANO = 2011
                THEN A.VALOR
                ELSE 0.00
           END)       AS VALOR2011_TRIMESTRE4
           ,0.00      AS VALOR2010_TRIMESTRE1
           ,0.00      AS VALOR2010_TRIMESTRE2
           ,0.00      AS VALOR2010_TRIMESTRE3
           ,0.00      AS VALOR2010_TRIMESTRE4
           ,0.00      AS VALOR2009_TRIMESTRE1
           ,0.00      AS VALOR2009_TRIMESTRE2
           ,0.00      AS VALOR2009_TRIMESTRE3
           ,0.00      AS VALOR2009_TRIMESTRE4
           ,0.00      AS VALOR2008_TRIMESTRE1
           ,0.00      AS VALOR2008_TRIMESTRE2
           ,0.00      AS VALOR2008_TRIMESTRE3
           ,0.00      AS VALOR2008_TRIMESTRE4
           
           
      FROM TABELA2011      A WITH(NOLOCK)
      
      GROUP BY A.EMPRESA
      
    UNION ALL

    SELECT A.EMPRESA  AS EMPRESA       
           ,0.00      AS VALOR2011_TRIMESTRE1
           ,0.00      AS VALOR2011_TRIMESTRE2
           ,0.00      AS VALOR2011_TRIMESTRE3
           ,0.00      AS VALOR2011_TRIMESTRE4
           ,SUM(CASE WHEN A.TRIMESTRE = 1 AND A.ANO = 2010
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2010_TRIMESTRE1
           ,SUM(CASE WHEN A.TRIMESTRE = 2 AND A.ANO = 2010
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2010_TRIMESTRE2
           ,SUM(CASE WHEN A.TRIMESTRE = 3 AND A.ANO = 2010
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2010_TRIMESTRE3
          ,SUM(CASE WHEN A.TRIMESTRE = 4 AND A.ANO = 2010
                THEN A.VALOR
                ELSE 0.00
           END)       AS VALOR2010_TRIMESTRE4       
           ,0.00      AS VALOR2009_TRIMESTRE1
           ,0.00      AS VALOR2009_TRIMESTRE2
           ,0.00      AS VALOR2009_TRIMESTRE3
           ,0.00      AS VALOR2009_TRIMESTRE4
           ,0.00      AS VALOR2008_TRIMESTRE1
           ,0.00      AS VALOR2008_TRIMESTRE2
           ,0.00      AS VALOR2008_TRIMESTRE3
           ,0.00      AS VALOR2008_TRIMESTRE4
           
           
      FROM TABELA2010      A WITH(NOLOCK)
      
      GROUP BY A.EMPRESA

    )X
      
    GROUP BY X.EMPRESA

    Abraços.

    • Marcado como Resposta Luizhcota terça-feira, 22 de janeiro de 2013 05:42
    quinta-feira, 17 de janeiro de 2013 13:55
  • Luiz,

    Bom dia,

    O problema estava no Group by , pois pelo que vi, você adicionou campos como CONTA, no qual, na tabela2010 e tabela2010, eles são diferente, logo ,retornaria 4 linhas no seu resultado. Desta forma, tratei a conta com substring no group by e na Select, e retornou conforme seu exemplo.

    Veja  abaixo:


    SELECT X.CODIGO                    AS CODIGO 
          ,X.EMPRESA                   AS EMPRESA
     ,SUBSTRING(X.CONTA,5,15)     AS CONTA
     ,X.NOME                      AS NOME
     ,SUM(X.VALOR2010_TRIMESTRE1) AS VALOR2010_TRIMESTRE1
     ,SUM(X.VALOR2010_TRIMESTRE2) AS VALOR2010_TRIMESTRE2
     ,SUM(X.VALOR2010_TRIMESTRE3) AS VALOR2010_TRIMESTRE3
     ,SUM(X.VALOR2010_TRIMESTRE4) AS VALOR2010_TRIMESTRE4
     ,SUM(X.VALOR2009_TRIMESTRE1) AS VALOR2009_TRIMESTRE1
     ,SUM(X.VALOR2009_TRIMESTRE2) AS VALOR2009_TRIMESTRE2
     ,SUM(X.VALOR2009_TRIMESTRE3) AS VALOR2009_TRIMESTRE3
     ,SUM(X.VALOR2009_TRIMESTRE4) AS VALOR2009_TRIMESTRE4

      FROM (   
                              
    SELECT A.CODIGO   AS CODIGO
           ,A.EMPRESA AS EMPRESA 
      ,A.CONTA   AS CONTA
      ,A.NOME    AS NOME  
           ,SUM(CASE WHEN A.TRIMESTRE = 1 AND A.ANO = 2010
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2010_TRIMESTRE1
           ,SUM(CASE WHEN A.TRIMESTRE = 2 AND A.ANO = 2010
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2010_TRIMESTRE2
           ,SUM(CASE WHEN A.TRIMESTRE = 3 AND A.ANO = 2010
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2010_TRIMESTRE3
          ,SUM(CASE WHEN A.TRIMESTRE = 4 AND A.ANO = 2010
                THEN A.VALOR
                ELSE 0.00
           END)       AS VALOR2010_TRIMESTRE4
           ,0.00      AS VALOR2009_TRIMESTRE1
           ,0.00      AS VALOR2009_TRIMESTRE2
           ,0.00      AS VALOR2009_TRIMESTRE3
           ,0.00      AS VALOR2009_TRIMESTRE4
      
           
           
      FROM TABELA2010      A WITH(NOLOCK)
      
      GROUP BY A.EMPRESA,A.CODIGO,A.CONTA,A.NOME
      
    UNION ALL

    SELECT  A.CODIGO  AS CODIGO
           ,A.EMPRESA AS EMPRESA 
      ,A.CONTA   AS CONTA
      ,A.NOME    AS NOME      
           ,0.00      AS VALOR2010_TRIMESTRE1
           ,0.00      AS VALOR2010_TRIMESTRE2
           ,0.00      AS VALOR2010_TRIMESTRE3
           ,0.00      AS VALOR2010_TRIMESTRE4
           ,SUM(CASE WHEN A.TRIMESTRE = 1 AND A.ANO = 2009
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2009_TRIMESTRE1
           ,SUM(CASE WHEN A.TRIMESTRE = 2 AND A.ANO = 2009
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2009_TRIMESTRE2
           ,SUM(CASE WHEN A.TRIMESTRE = 3 AND A.ANO = 2009
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2009_TRIMESTRE3
          ,SUM(CASE WHEN A.TRIMESTRE = 4 AND A.ANO = 2009
                THEN A.VALOR
                ELSE 0.00
           END)       AS VALOR2009_TRIMESTRE4       
           
           
      FROM TABELA2009      A WITH(NOLOCK)
      
    GROUP BY A.EMPRESA,A.CODIGO,A.CONTA,A.NOME

    )X
      
    GROUP BY  X.CODIGO 
    ,X.EMPRESA
    ,SUBSTRING(X.CONTA,5,15)
    ,X.NOME   

    • Marcado como Resposta Ricardo Russo segunda-feira, 21 de janeiro de 2013 11:50
    sexta-feira, 18 de janeiro de 2013 10:20
  • Olá Luiz Henrique,

    Tente dessa forma:

    Declare @Dados Table (
    	[Codigo] [int],
    	[Empresa] [varchar](50) NULL,
    	[Trimestre] [int] NULL,
    	[Ano] [int] NULL,
    	[Conta] [varchar](50) NULL,
    	[NomeConta] [varchar](50) NULL,
    	[Valor] [decimal](6, 2) NULL
    );
    
    
    Insert Into @Dados Select * From [dbo].[Tabela2011];
    Insert Into @Dados Select * From [dbo].[Tabela2010];
    Insert Into @Dados Select * From [dbo].[Tabela2009];
    Insert Into @Dados Select * From [dbo].[Tabela2008];
    
    Select 
    	Codigo,
    	Empresa,
    	Conta,
    	NomeConta,
    	Sum(Case When Trimestre = 4 And Ano = 2011 Then Valor Else 0 End) "4 Trimestre / 2011",
    	Sum(Case When Trimestre = 3 And Ano = 2011 Then Valor Else 0 End) "3 Trimestre / 2011",
    	Sum(Case When Trimestre = 2 And Ano = 2011 Then Valor Else 0 End) "2 Trimestre / 2011"
    	/*Continar o case para cada periodo que for necessário*/
    
    	From @Dados
    	Group By Codigo, Empresa, Conta, NomeConta;
    
    	


    Peterson Roberto Oliveira Seridonio
    Desenvolvedor C#
    MCTS Windows 7


    sexta-feira, 18 de janeiro de 2013 14:59

Todas as Respostas

  • Olá Luiz...

    A solução é utilizar a cláusula CASE.

    Segue um exemplo (tirado daqui) que vai clarear suas idéias.

    SELECT  nome = CASE tppessoa

                     WHEN 1 THEN ( SELECT   c.nome

                                   FROM     cliente c

                                   WHERE    c.cdcliente = p.cdcliente

                                 )

                     WHEN 2 THEN ( SELECT   f.nome

                                   FROM     fornecedor f

                                   WHERE    f.cdfornecedor = p.cdfornecedor

                                 )

                     ELSE ''

                   END

    FROM    pessoa p


    Espero ter lhe ajudado.

    Abraço !


    Não esqueça de marcar o post como útil caso tenha te ajudado.

    quinta-feira, 17 de janeiro de 2013 13:44
  • Olá luiz,

    A forma que vou colocar abaixo ,não seria a melhor ,mas resolveria seu problema. Basta adicionar agora , as unions para as tabelas 2009 e 2008.

    SELECT  X.EMPRESA
           ,SUM(X.VALOR2011_TRIMESTRE1) AS VALOR2011_TRIMESTRE1
           ,SUM(X.VALOR2011_TRIMESTRE2) AS VALOR2011_TRIMESTRE2
           ,SUM(X.VALOR2011_TRIMESTRE3) AS VALOR2011_TRIMESTRE3
           ,SUM(X.VALOR2011_TRIMESTRE4) AS VALOR2011_TRIMESTRE4
      ,SUM(X.VALOR2010_TRIMESTRE1) AS VALOR2010_TRIMESTRE1
      ,SUM(X.VALOR2010_TRIMESTRE2) AS VALOR2010_TRIMESTRE2
      ,SUM(X.VALOR2010_TRIMESTRE3) AS VALOR2010_TRIMESTRE3
      ,SUM(X.VALOR2010_TRIMESTRE4) AS VALOR2010_TRIMESTRE4
      ,SUM(X.VALOR2009_TRIMESTRE1) AS VALOR2009_TRIMESTRE1
      ,SUM(X.VALOR2009_TRIMESTRE2) AS VALOR2009_TRIMESTRE2
      ,SUM(X.VALOR2009_TRIMESTRE3) AS VALOR2009_TRIMESTRE3
      ,SUM(X.VALOR2009_TRIMESTRE4) AS VALOR2009_TRIMESTRE4
      ,SUM(X.VALOR2008_TRIMESTRE1) AS VALOR2008_TRIMESTRE1
      ,SUM(X.VALOR2008_TRIMESTRE2) AS VALOR2008_TRIMESTRE2
      ,SUM(X.VALOR2008_TRIMESTRE3) AS VALOR2008_TRIMESTRE3
      ,SUM(X.VALOR2008_TRIMESTRE4) AS VALOR2008_TRIMESTRE4
      FROM (   
                              
    SELECT A.EMPRESA  AS EMPRESA
           ,SUM(CASE WHEN A.TRIMESTRE = 1 AND A.ANO = 2011
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2011_TRIMESTRE1
           ,SUM(CASE WHEN A.TRIMESTRE = 2 AND A.ANO = 2011
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2011_TRIMESTRE2
           ,SUM(CASE WHEN A.TRIMESTRE = 3 AND A.ANO = 2011
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2011_TRIMESTRE3
          ,SUM(CASE WHEN A.TRIMESTRE = 4 AND A.ANO = 2011
                THEN A.VALOR
                ELSE 0.00
           END)       AS VALOR2011_TRIMESTRE4
           ,0.00      AS VALOR2010_TRIMESTRE1
           ,0.00      AS VALOR2010_TRIMESTRE2
           ,0.00      AS VALOR2010_TRIMESTRE3
           ,0.00      AS VALOR2010_TRIMESTRE4
           ,0.00      AS VALOR2009_TRIMESTRE1
           ,0.00      AS VALOR2009_TRIMESTRE2
           ,0.00      AS VALOR2009_TRIMESTRE3
           ,0.00      AS VALOR2009_TRIMESTRE4
           ,0.00      AS VALOR2008_TRIMESTRE1
           ,0.00      AS VALOR2008_TRIMESTRE2
           ,0.00      AS VALOR2008_TRIMESTRE3
           ,0.00      AS VALOR2008_TRIMESTRE4
           
           
      FROM TABELA2011      A WITH(NOLOCK)
      
      GROUP BY A.EMPRESA
      
    UNION ALL

    SELECT A.EMPRESA  AS EMPRESA       
           ,0.00      AS VALOR2011_TRIMESTRE1
           ,0.00      AS VALOR2011_TRIMESTRE2
           ,0.00      AS VALOR2011_TRIMESTRE3
           ,0.00      AS VALOR2011_TRIMESTRE4
           ,SUM(CASE WHEN A.TRIMESTRE = 1 AND A.ANO = 2010
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2010_TRIMESTRE1
           ,SUM(CASE WHEN A.TRIMESTRE = 2 AND A.ANO = 2010
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2010_TRIMESTRE2
           ,SUM(CASE WHEN A.TRIMESTRE = 3 AND A.ANO = 2010
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2010_TRIMESTRE3
          ,SUM(CASE WHEN A.TRIMESTRE = 4 AND A.ANO = 2010
                THEN A.VALOR
                ELSE 0.00
           END)       AS VALOR2010_TRIMESTRE4       
           ,0.00      AS VALOR2009_TRIMESTRE1
           ,0.00      AS VALOR2009_TRIMESTRE2
           ,0.00      AS VALOR2009_TRIMESTRE3
           ,0.00      AS VALOR2009_TRIMESTRE4
           ,0.00      AS VALOR2008_TRIMESTRE1
           ,0.00      AS VALOR2008_TRIMESTRE2
           ,0.00      AS VALOR2008_TRIMESTRE3
           ,0.00      AS VALOR2008_TRIMESTRE4
           
           
      FROM TABELA2010      A WITH(NOLOCK)
      
      GROUP BY A.EMPRESA

    )X
      
    GROUP BY X.EMPRESA

    Abraços.

    • Marcado como Resposta Luizhcota terça-feira, 22 de janeiro de 2013 05:42
    quinta-feira, 17 de janeiro de 2013 13:55
  • Rafael,

    O seu chegou mais proximo, porém temos alguns problema.

    Vou colocar mais exemplos para você entender.

    Tabela2010

    Codigo Empresa Trimestre Ano Conta Nome Valor
    1 Vale 1 2010 10.0.0.00.00.00  ATIVO TOTAL 100
    1 Vale 2 2010 10.0.0.00.00.00  ATIVO TOTAL 200
    1 Vale 3 2010 10.0.0.00.00.00  ATIVO TOTAL 300
    1 Vale 4 2010 10.0.0.00.00.00  ATIVO TOTAL 400
    2 Petro 1 2010 10.0.0.00.00.00  ATIVO TOTAL 600
    2 Petro 2 2010 10.0.0.00.00.00  ATIVO TOTAL 700
    2 Petro 3 2010 10.0.0.00.00.00  ATIVO TOTAL 800
    2 Petro 4 2010 10.0.0.00.00.00  ATIVO TOTAL 900

    Tabela 2009

    Codigo Empresa Trimestre Ano Conta Nome Valor
    1 Vale 1 2009 10.0.0.00.00.00  ATIVO TOTAL 500
    1 Vale 2 2009 10.0.0.00.00.00  ATIVO TOTAL 600
    1 Vale 3 2009 10.0.0.00.00.00  ATIVO TOTAL 700
    1 Vale 4 2009 10.0.0.00.00.00  ATIVO TOTAL 800
    2 Petro 1 2009 10.0.0.00.00.00  ATIVO TOTAL 100
    2 Petro 2 2009 10.0.0.00.00.00  ATIVO TOTAL 200
    2 Petro 3 2009 10.0.0.00.00.00  ATIVO TOTAL 300
    2 Petro 4 2009 10.0.0.00.00.00  ATIVO TOTAL 400

    Resultado que eu preciso

    Codigo Empresa Conta Nome Ano2010_Trimestre1 Ano2010_Trimestre2 Ano2010_Trimestre3 Ano2010_Trimestre4 Ano2009_Trimestre1 Ano2009_Trimestre2 Ano2009_Trimestre3 Ano2009_Trimestre4
    1 Vale 10.0.0.00.00.00  ATIVO TOTAL 100 200 300 400 500 600 700 800
    2 Petro 10.0.0.00.00.00  ATIVO TOTAL 500 600 700 800 100 200 300 400


    Luiz Henroqie

    quinta-feira, 17 de janeiro de 2013 22:19
  • Luiz,

    Bom dia,

    O problema estava no Group by , pois pelo que vi, você adicionou campos como CONTA, no qual, na tabela2010 e tabela2010, eles são diferente, logo ,retornaria 4 linhas no seu resultado. Desta forma, tratei a conta com substring no group by e na Select, e retornou conforme seu exemplo.

    Veja  abaixo:


    SELECT X.CODIGO                    AS CODIGO 
          ,X.EMPRESA                   AS EMPRESA
     ,SUBSTRING(X.CONTA,5,15)     AS CONTA
     ,X.NOME                      AS NOME
     ,SUM(X.VALOR2010_TRIMESTRE1) AS VALOR2010_TRIMESTRE1
     ,SUM(X.VALOR2010_TRIMESTRE2) AS VALOR2010_TRIMESTRE2
     ,SUM(X.VALOR2010_TRIMESTRE3) AS VALOR2010_TRIMESTRE3
     ,SUM(X.VALOR2010_TRIMESTRE4) AS VALOR2010_TRIMESTRE4
     ,SUM(X.VALOR2009_TRIMESTRE1) AS VALOR2009_TRIMESTRE1
     ,SUM(X.VALOR2009_TRIMESTRE2) AS VALOR2009_TRIMESTRE2
     ,SUM(X.VALOR2009_TRIMESTRE3) AS VALOR2009_TRIMESTRE3
     ,SUM(X.VALOR2009_TRIMESTRE4) AS VALOR2009_TRIMESTRE4

      FROM (   
                              
    SELECT A.CODIGO   AS CODIGO
           ,A.EMPRESA AS EMPRESA 
      ,A.CONTA   AS CONTA
      ,A.NOME    AS NOME  
           ,SUM(CASE WHEN A.TRIMESTRE = 1 AND A.ANO = 2010
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2010_TRIMESTRE1
           ,SUM(CASE WHEN A.TRIMESTRE = 2 AND A.ANO = 2010
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2010_TRIMESTRE2
           ,SUM(CASE WHEN A.TRIMESTRE = 3 AND A.ANO = 2010
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2010_TRIMESTRE3
          ,SUM(CASE WHEN A.TRIMESTRE = 4 AND A.ANO = 2010
                THEN A.VALOR
                ELSE 0.00
           END)       AS VALOR2010_TRIMESTRE4
           ,0.00      AS VALOR2009_TRIMESTRE1
           ,0.00      AS VALOR2009_TRIMESTRE2
           ,0.00      AS VALOR2009_TRIMESTRE3
           ,0.00      AS VALOR2009_TRIMESTRE4
      
           
           
      FROM TABELA2010      A WITH(NOLOCK)
      
      GROUP BY A.EMPRESA,A.CODIGO,A.CONTA,A.NOME
      
    UNION ALL

    SELECT  A.CODIGO  AS CODIGO
           ,A.EMPRESA AS EMPRESA 
      ,A.CONTA   AS CONTA
      ,A.NOME    AS NOME      
           ,0.00      AS VALOR2010_TRIMESTRE1
           ,0.00      AS VALOR2010_TRIMESTRE2
           ,0.00      AS VALOR2010_TRIMESTRE3
           ,0.00      AS VALOR2010_TRIMESTRE4
           ,SUM(CASE WHEN A.TRIMESTRE = 1 AND A.ANO = 2009
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2009_TRIMESTRE1
           ,SUM(CASE WHEN A.TRIMESTRE = 2 AND A.ANO = 2009
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2009_TRIMESTRE2
           ,SUM(CASE WHEN A.TRIMESTRE = 3 AND A.ANO = 2009
                THEN A.VALOR
                ELSE 0.00
           END)        AS VALOR2009_TRIMESTRE3
          ,SUM(CASE WHEN A.TRIMESTRE = 4 AND A.ANO = 2009
                THEN A.VALOR
                ELSE 0.00
           END)       AS VALOR2009_TRIMESTRE4       
           
           
      FROM TABELA2009      A WITH(NOLOCK)
      
    GROUP BY A.EMPRESA,A.CODIGO,A.CONTA,A.NOME

    )X
      
    GROUP BY  X.CODIGO 
    ,X.EMPRESA
    ,SUBSTRING(X.CONTA,5,15)
    ,X.NOME   

    • Marcado como Resposta Ricardo Russo segunda-feira, 21 de janeiro de 2013 11:50
    sexta-feira, 18 de janeiro de 2013 10:20
  • Olá Luiz Henrique,

    Tente dessa forma:

    Declare @Dados Table (
    	[Codigo] [int],
    	[Empresa] [varchar](50) NULL,
    	[Trimestre] [int] NULL,
    	[Ano] [int] NULL,
    	[Conta] [varchar](50) NULL,
    	[NomeConta] [varchar](50) NULL,
    	[Valor] [decimal](6, 2) NULL
    );
    
    
    Insert Into @Dados Select * From [dbo].[Tabela2011];
    Insert Into @Dados Select * From [dbo].[Tabela2010];
    Insert Into @Dados Select * From [dbo].[Tabela2009];
    Insert Into @Dados Select * From [dbo].[Tabela2008];
    
    Select 
    	Codigo,
    	Empresa,
    	Conta,
    	NomeConta,
    	Sum(Case When Trimestre = 4 And Ano = 2011 Then Valor Else 0 End) "4 Trimestre / 2011",
    	Sum(Case When Trimestre = 3 And Ano = 2011 Then Valor Else 0 End) "3 Trimestre / 2011",
    	Sum(Case When Trimestre = 2 And Ano = 2011 Then Valor Else 0 End) "2 Trimestre / 2011"
    	/*Continar o case para cada periodo que for necessário*/
    
    	From @Dados
    	Group By Codigo, Empresa, Conta, NomeConta;
    
    	


    Peterson Roberto Oliveira Seridonio
    Desenvolvedor C#
    MCTS Windows 7


    sexta-feira, 18 de janeiro de 2013 14:59