locked
Dois Selects Com Somatório no Mesmo Scrip RRS feed

  • Pergunta

  • Olá Amigos,

    A Empresa que trabalho está migrando o banco para SQL Server, sendo assim, estou tendo algumas dúvidas na programação.

    Preciso montar um relatório, buscando primeiramente o total de registros e o somatório gerais e depois os registros dentro de uma condição especifica, tudo da mesma tabela, sendo assim, gostaria de saber se há uma maneira de fazer isso com apenas 01 Select, seria mais ou menos assim:

    Por exemplo:

    SELECT SUM(PRECO) PRECO,
    
                COUNT(*) QTD
    
    FROM tbPRECO
    
    WHERE MESREF = '11'
    
         AND ANOREF = '2011'
    

     

    A outra busca seria assim:

     

     

    SELECT SUM(PRECO) PRECO,
    
                COUNT(*) QTD
    
    FROM tbPRECO
    
    WHERE MESREF = '11'
    
         AND ANOREF = '2011'
    
         AND SITUACAO = 'E'
    
    

    O que desejo e que isso venha em duas colunas no mesmo select, algo mais ou menos assim:
     
    MÊS/ANO          PRECO        QTD  SITUACAO
    11/2011      R$ 1.000,00    00015   Geral
    11/2011      R$ 1.000,00    00003   SITUACAO = 'E'

    Alguma Sugestão de como fazer isso?



    • Editado Thiago Darós segunda-feira, 14 de novembro de 2011 13:52
    segunda-feira, 14 de novembro de 2011 13:50

Respostas

  • Thiago,

     

    Tente assim:

    --DECLARE DE TABELA

    DECLARE @T1 TABLE

    (

          Mes INT,

          Situacao CHAR(1),

          Valor DECIMAL(9,2)

    )

     

    --CARGA DE DADOS

    INSERT INTO @T1 VALUES

    (1,'E',50.50),

    (1,'E',60.50),

    (1,'A',70.50),

    (1,'B',80.50),

    (2,'A',90.50),

    (4,'C',100.50)

     

    --SELECT

    SELECT b.Mes, ISNULL(b.Situacao, 'Total') AS Situacao, b.Total$, b.Total

    FROM (SELECT a.Mes, a.Situacao, SUM(a.Valor) AS Total$, COUNT(a.Valor) AS Total

    FROM @T1 a

    GROUP BY a.Mes, a.Situacao WITH ROLLUP) b

    WHERE (b.Mes IS NULL AND b.Situacao IS NULL)

          OR (b.MES IS NOT NULL AND b.Situacao IS NOT NULL)


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    • Marcado como Resposta Thiago Darós segunda-feira, 14 de novembro de 2011 16:35
    segunda-feira, 14 de novembro de 2011 14:05
    Moderador

Todas as Respostas

  • Thiago,

     

    Tente assim:

    --DECLARE DE TABELA

    DECLARE @T1 TABLE

    (

          Mes INT,

          Situacao CHAR(1),

          Valor DECIMAL(9,2)

    )

     

    --CARGA DE DADOS

    INSERT INTO @T1 VALUES

    (1,'E',50.50),

    (1,'E',60.50),

    (1,'A',70.50),

    (1,'B',80.50),

    (2,'A',90.50),

    (4,'C',100.50)

     

    --SELECT

    SELECT b.Mes, ISNULL(b.Situacao, 'Total') AS Situacao, b.Total$, b.Total

    FROM (SELECT a.Mes, a.Situacao, SUM(a.Valor) AS Total$, COUNT(a.Valor) AS Total

    FROM @T1 a

    GROUP BY a.Mes, a.Situacao WITH ROLLUP) b

    WHERE (b.Mes IS NULL AND b.Situacao IS NULL)

          OR (b.MES IS NOT NULL AND b.Situacao IS NOT NULL)


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    • Marcado como Resposta Thiago Darós segunda-feira, 14 de novembro de 2011 16:35
    segunda-feira, 14 de novembro de 2011 14:05
    Moderador
  • Olá Fabrizzio Caputo,

     

    Amigo testei aqui e deu certo, era exatamente isso que estava precisando.

     

    Muito obrigado.

     

    Thiago Darós



    • Editado Thiago Darós segunda-feira, 14 de novembro de 2011 15:50
    segunda-feira, 14 de novembro de 2011 15:25
  • Thiago,

     

    Se achar justo, para que possa ajudar outros usuarios que tenham a mesma duvida, por favor marque a thread que te ajudou como "resposta".


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    segunda-feira, 14 de novembro de 2011 16:04
    Moderador