Dúvida num Query (JOIN)

9 respostas
mendonca_ime

galera:
estou fazendo uma busca assim:

SELECT a.id AS id_aplicacao, a.descricao AS aplicacao, cc.nome_reduzido AS despesa, SUM(p.total) as total_pedidos, SUM(r.valor_ordem_centrocusto) as total_romaneios FROM aplicacoes AS a INNER JOIN centrocustos AS cc ON cc.id_aplicacao = a.id INNER JOIN ordem_centrocustos AS occ ON occ.id_centrocusto = cc.id LEFT JOIN pedidos AS p ON p.situacao >= 1 AND p.id_ordem_centrocusto = occ.id LEFT JOIN romaneios AS r ON r.situacao > 1 AND p.id_ordem_centrocusto = r.id_ordem_centrocusto GROUP BY cc.nome_reduzido, a.id, a.descricao ORDER BY a.id, cc.nome_reduzido;
com uma resposta assim:

id_aplicacao | aplicacao | despesa | total_pedidos | total_romaneios --------------+--------------------------+----------------------------------+---------------+----------------- 1 | Tributos | COFINS | 3000 | 1 | Tributos | CSLL | 2880 | 1 | Tributos | IRPJ | 4800 | 1 | Tributos | ISS | 3000 | 1 | Tributos | PIS | 650 | 2 | Despesas Administrativas | Adiantamento cedido para viagens | | 2 | Despesas Administrativas | Adiantamento de Salários | | 2 | Despesas Administrativas | Brindes | 20150 | 2 | Despesas Administrativas | Despesas da ADM | | 2 | Despesas Administrativas | Diárias de Hotéis e Pousadas | | 4 | Outras | João Carlos | | 6 | Teste | TesteAdm | | 8 | Máquinas e Equipamentos | Aluguel de Câmeras | | 8 | Máquinas e Equipamentos | Eletrônicos | | 8 | Máquinas e Equipamentos | Teste da VALEC | | 9 | Aluguel de Veículos | Caminhão 4t | | 9 | Aluguel de Veículos | Sedan 54/70HP | 10000 | 1200 9 | Aluguel de Veículos | Sedan: 71/100HP | | 9 | Aluguel de Veículos | Veíc. Utilitário | | 1000
só que pra facilitar eu quero só as linhas que possuam pedido E/OU romaneio… assim:

id_aplicacao | aplicacao | despesa | total_pedidos | total_romaneios --------------+--------------------------+----------------------------------+---------------+----------------- 1 | Tributos | COFINS | 3000 | 1 | Tributos | CSLL | 2880 | 1 | Tributos | IRPJ | 4800 | 1 | Tributos | ISS | 3000 | 1 | Tributos | PIS | 650 | 2 | Despesas Administrativas | Brindes | 20150 | 9 | Aluguel de Veículos | Sedan 54/70HP | 10000 | 1200 9 | Aluguel de Veículos | Veíc. Utilitário | | 1000

como ficaria o query?
valeu!

9 Respostas

worldsoft

basta apenas adcionar uma cláusula where na sua SQL.

mendonca_ime

eu queria ver se tem um jeito sem usar um:

worldsoft

[quote=mendonca_ime]eu queria ver se tem um jeito sem usar um:

Bom eu não conheço outra forma, então não posso te ajudar…

mendonca_ime

blz então… com o “HAVING” funciona bem só não sei como fica em tempo de execução (se o banco calcula a soma de novo e perde tempo) ou só compara!

worldsoft

Cara creio eu ele vai calcular novamente a soma, mais por que em vez de mandar a sql refazer a soma você não usa os alias que vc criou:

HAVING NOT (total_pedidos is null AND  total_romaneios is null)
mendonca_ime

worldsoft:

Cara creio eu ele vai calcular novamente a soma, mais por que em vez de mandar a sql refazer a soma você não usa os alias que vc criou:

HAVING NOT (total_pedidos is null AND total_romaneios is null)

aí dá erro de coluna inexistente
até onde eu sei não dá pra usar os alias no HAVING sem ter uma subQuery ou um View…

worldsoft

mendonca_ime:
worldsoft:

Cara creio eu ele vai calcular novamente a soma, mais por que em vez de mandar a sql refazer a soma você não usa os alias que vc criou:

HAVING NOT (total_pedidos is null AND total_romaneios is null)

aí dá erro de coluna inexistente
até onde eu sei não dá pra usar os alias no HAVING sem ter uma subQuery ou um View…

Qual banco de dados você está usando?

mendonca_ime

PSQL

worldsoft

Nossa que coisa, no mysql usar alias no having funciona normal… Então acho que não tem jeito.

Criado 16 de junho de 2011
Ultima resposta 16 de jun. de 2011
Respostas 9
Participantes 2