Usuário com melhor resposta
Dois Selects Com Somatório no Mesmo Scrip

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 SITUACAO11/2011 R$ 1.000,00 00015 Geral11/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:05Moderador
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:05Moderador -
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.comsegunda-feira, 14 de novembro de 2011 16:04Moderador