Sql - Agrupar 2 subconsultas agrupadas??
Olá a todos,
Tenho a seguinte situação:
Tenho 2 consultas SQL que estão unidas por UNION.
Porém, tenho que agrupar essas 2 consultas, que já são agrupadas.
Como faço isso? Agrupar 2 consultas?
Tenho a seguinte situação:
Tenho 2 consultas SQL que estão unidas por UNION.
Porém, tenho que agrupar essas 2 consultas, que já são agrupadas.
Como faço isso? Agrupar 2 consultas?
Erucci
Curtidas 0
Respostas
Djjunior
18/02/2008
select a, b from ( (select a, b from tabA group by a, b) union all (select a, b from tabB group by a, b) ) ab group by ab.a, ab.b
qual a dificuldade ?
GOSTEI 0
Erucci
18/02/2008
Então amigo, obrigado pela ajuda: Veja como está minha consulta SQL:
//-------------------------------------------------------------------------------
SELECT PlanodeContas.planoID, PlanodeContas.planoDescricao, Sum(Recibos.reciboValorPago) AS Total,´B´ AS Tipo, Count(Pagamentos.pagamentoID) AS Total2 FROM PlanodeContas INNER JOIN (Recibos INNER JOIN Pagamentos ON Recibos.pagamentoID = Pagamentos.pagamentoID) ON PlanodeContas.planoID = Pagamentos.planoID WHERE Recibos.pagamentoID<>0 AND Pagamentos.pagamentoExcluido=False AND Recibos.formaID in (1,3,4,5) AND Recibos.reciboData+Recibos.reciboHora Between #02/18/2008 16:49:49 And 02/19/2008 23:59:59
GROUP BY PlanodeContas.planoID, PlanodeContas.planoDescricao
UNION ALL
SELECT PlanodeContas.planoID, PlanodeContas.planoDescricao, Sum(ChequesEmitidos.chequeValor) AS Total, ´B´ AS Tipo, Count(Pagamentos.pagamentoID) AS Total2 FROM (PlanodeContas INNER JOIN (Recibos INNER JOIN Pagamentos ON Recibos.pagamentoID = Pagamentos.pagamentoID) ON PlanodeContas.planoID = Pagamentos.planoID) INNER JOIN ChequesEmitidos ON Pagamentos.pagamentoID = ChequesEmitidos.pagamentoID WHERE Recibos.pagamentoID<>0 AND Pagamentos.pagamentoExcluido=False
GROUP BY PlanodeContas.planoID, PlanodeContas.planoDescricao
UNION ALL
SELECT 0 AS planoID, ´RETIRADA DO CAIXA´ AS planoDescricao, Sum(CaixaMovimentos.movValor) AS Total, ´B´ AS Tipo, Count(CaixaMovimentos.movID) AS Total2 FROM CaixaMovimentos WHERE CaixaMovimentos.movTipo=´RETIRADA´ AND CaixaMovimentos.movData+CaixaMovimentos.movHora Between #02/18/2008 16:49:49 And 02/19/2008 23:59:59
GROUP BY 0, ´RETIRADA DO CAIXA´
//-------------------------------------------------------------------------------
Será que tenho que alterar minha consulta, colocando entre parênteses ou algo assim. Porque essa minha consulta acaba trazendo os dados assim
ALUGUEL 100,00
ALUGUEL 50,00
Só que quero que aparecça:
ALUGUEL 150,00
Fico agradecido se puder me ajudar!!
Abraços!!
//-------------------------------------------------------------------------------
SELECT PlanodeContas.planoID, PlanodeContas.planoDescricao, Sum(Recibos.reciboValorPago) AS Total,´B´ AS Tipo, Count(Pagamentos.pagamentoID) AS Total2 FROM PlanodeContas INNER JOIN (Recibos INNER JOIN Pagamentos ON Recibos.pagamentoID = Pagamentos.pagamentoID) ON PlanodeContas.planoID = Pagamentos.planoID WHERE Recibos.pagamentoID<>0 AND Pagamentos.pagamentoExcluido=False AND Recibos.formaID in (1,3,4,5) AND Recibos.reciboData+Recibos.reciboHora Between #02/18/2008 16:49:49 And 02/19/2008 23:59:59
GROUP BY PlanodeContas.planoID, PlanodeContas.planoDescricao
UNION ALL
SELECT PlanodeContas.planoID, PlanodeContas.planoDescricao, Sum(ChequesEmitidos.chequeValor) AS Total, ´B´ AS Tipo, Count(Pagamentos.pagamentoID) AS Total2 FROM (PlanodeContas INNER JOIN (Recibos INNER JOIN Pagamentos ON Recibos.pagamentoID = Pagamentos.pagamentoID) ON PlanodeContas.planoID = Pagamentos.planoID) INNER JOIN ChequesEmitidos ON Pagamentos.pagamentoID = ChequesEmitidos.pagamentoID WHERE Recibos.pagamentoID<>0 AND Pagamentos.pagamentoExcluido=False
GROUP BY PlanodeContas.planoID, PlanodeContas.planoDescricao
UNION ALL
SELECT 0 AS planoID, ´RETIRADA DO CAIXA´ AS planoDescricao, Sum(CaixaMovimentos.movValor) AS Total, ´B´ AS Tipo, Count(CaixaMovimentos.movID) AS Total2 FROM CaixaMovimentos WHERE CaixaMovimentos.movTipo=´RETIRADA´ AND CaixaMovimentos.movData+CaixaMovimentos.movHora Between #02/18/2008 16:49:49 And 02/19/2008 23:59:59
GROUP BY 0, ´RETIRADA DO CAIXA´
//-------------------------------------------------------------------------------
Será que tenho que alterar minha consulta, colocando entre parênteses ou algo assim. Porque essa minha consulta acaba trazendo os dados assim
ALUGUEL 100,00
ALUGUEL 50,00
Só que quero que aparecça:
ALUGUEL 150,00
Fico agradecido se puder me ajudar!!
Abraços!!
GOSTEI 0
Erucci
18/02/2008
Vamos lá pessoal,me ajuda ai
A consulta é essa:
[b:e4198f97b3]SELECT PlanodeContas.planoID, PlanodeContas.planoDescricao, Sum(Recibos.reciboValorPago) AS Total,´B´ AS Tipo, Count(Pagamentos.pagamentoID) AS Total2 FROM PlanodeContas INNER JOIN (Recibos INNER JOIN Pagamentos ON Recibos.pagamentoID = Pagamentos.pagamentoID) ON PlanodeContas.planoID = Pagamentos.planoID WHERE Recibos.pagamentoID<>0 AND Pagamentos.pagamentoExcluido=False AND Recibos.formaID in (1,3,4,5) AND Recibos.reciboData+Recibos.reciboHora Between #02/18/2008 16:49:49 And 02/19/2008 23:59:59
GROUP BY PlanodeContas.planoID, PlanodeContas.planoDescricao
UNION ALL
SELECT PlanodeContas.planoID, PlanodeContas.planoDescricao, Sum(ChequesEmitidos.chequeValor) AS Total, ´B´ AS Tipo, Count(Pagamentos.pagamentoID) AS Total2 FROM (PlanodeContas INNER JOIN (Recibos INNER JOIN Pagamentos ON Recibos.pagamentoID = Pagamentos.pagamentoID) ON PlanodeContas.planoID = Pagamentos.planoID) INNER JOIN ChequesEmitidos ON Pagamentos.pagamentoID = ChequesEmitidos.pagamentoID WHERE Recibos.pagamentoID<>0 AND Pagamentos.pagamentoExcluido=False
GROUP BY PlanodeContas.planoID, PlanodeContas.planoDescricao[/b:e4198f97b3]
Como faço para agrupar essas 2 consultas unidas com UNION?
Porque essa minha consulta acaba trazendo os dados assim
ALUGUEL 100,00
ALUGUEL 50,00
Só que quero que aparecça:
ALUGUEL 150,00
Fico agradecido se puder me ajudar!!
Abraços!!
A consulta é essa:
[b:e4198f97b3]SELECT PlanodeContas.planoID, PlanodeContas.planoDescricao, Sum(Recibos.reciboValorPago) AS Total,´B´ AS Tipo, Count(Pagamentos.pagamentoID) AS Total2 FROM PlanodeContas INNER JOIN (Recibos INNER JOIN Pagamentos ON Recibos.pagamentoID = Pagamentos.pagamentoID) ON PlanodeContas.planoID = Pagamentos.planoID WHERE Recibos.pagamentoID<>0 AND Pagamentos.pagamentoExcluido=False AND Recibos.formaID in (1,3,4,5) AND Recibos.reciboData+Recibos.reciboHora Between #02/18/2008 16:49:49 And 02/19/2008 23:59:59
GROUP BY PlanodeContas.planoID, PlanodeContas.planoDescricao
UNION ALL
SELECT PlanodeContas.planoID, PlanodeContas.planoDescricao, Sum(ChequesEmitidos.chequeValor) AS Total, ´B´ AS Tipo, Count(Pagamentos.pagamentoID) AS Total2 FROM (PlanodeContas INNER JOIN (Recibos INNER JOIN Pagamentos ON Recibos.pagamentoID = Pagamentos.pagamentoID) ON PlanodeContas.planoID = Pagamentos.planoID) INNER JOIN ChequesEmitidos ON Pagamentos.pagamentoID = ChequesEmitidos.pagamentoID WHERE Recibos.pagamentoID<>0 AND Pagamentos.pagamentoExcluido=False
GROUP BY PlanodeContas.planoID, PlanodeContas.planoDescricao[/b:e4198f97b3]
Como faço para agrupar essas 2 consultas unidas com UNION?
Porque essa minha consulta acaba trazendo os dados assim
ALUGUEL 100,00
ALUGUEL 50,00
Só que quero que aparecça:
ALUGUEL 150,00
Fico agradecido se puder me ajudar!!
Abraços!!
GOSTEI 0
Paulo_amorim
18/02/2008
Olá
Você poderia reagrupar sua query, refazendo o SELECT. Assim, seus montes de UNION viram uma ´tabela´.
Não testei, mas deve funcionar.
Em tempo, queries não são parte do programa em si, mas ainda são blocos de código e merecem a tag de código
Espero que ajude.
Até+
Você poderia reagrupar sua query, refazendo o SELECT. Assim, seus montes de UNION viram uma ´tabela´.
SELECT SUM(<seu campo>) FROM (<seu select gigante>) GROUP BY(<seu critério>)
Não testei, mas deve funcionar.
Em tempo, queries não são parte do programa em si, mas ainda são blocos de código e merecem a tag de código
Espero que ajude.
Até+
GOSTEI 0