galera, criei umas tabelas de teste populadas assim:
[code]teste_pedido
id | id_despesa | total
----±-----------±------
1 | 1 | 100
2 | 1 | 200
3 | 1 | 300
4 | 2 | 400
5 | 2 | 500
teste_romaneio
id | id_despesa | total
----±-----------±------
1 | 1 | 1000
2 | 1 | 2000
3 | 2 | 3000
teste_despesa
id | nome
----±----------
1 | despesa 1
2 | despesa 2
3 | despesa 3[/code]
e preciso de um select que me retorne as somas dos totais dos pedidos e dos romaneios por despesas…
fazendo cada um separado ficou assim:
teste=# SELECT despesa.nome AS nome, COALESCE(SUM(pedido.total),0) as executado_pedido
teste=# FROM teste_despesa AS despesa
teste=# LEFT JOIN teste_pedido AS pedido ON pedido.id_despesa = despesa.id
teste=# GROUP BY despesa.nome ORDER BY despesa.nome;
nome | executado_pedido
-----------+------------------
despesa 1 | 600
despesa 2 | 900
despesa 3 | 0
(3 rows)
e
teste=# SELECT despesa.nome AS nome, COALESCE(SUM(romaneio.total),0) as executado_romaneio
teste=# FROM teste_despesa AS despesa
teste=# LEFT JOIN teste_romaneio AS romaneio ON romaneio.id_despesa = despesa.id
teste=# GROUP BY despesa.nome ORDER BY despesa.nome;
nome | executado_romaneio
-----------+--------------------
despesa 1 | 3000
despesa 2 | 3000
despesa 3 | 0
(3 rows)
tudo certinho… só que tentando juntar num query só eu esbarrei num problema:
teste=# SELECT despesa.nome AS nome, COALESCE(SUM(pedido.total),0) as executado_pedido, COALESCE(SUM(romaneio.total),0) as executado_romaneio
teste=# FROM teste_despesa AS despesa
teste=# LEFT JOIN teste_pedido AS pedido ON pedido.id_despesa = despesa.id
teste=# LEFT JOIN teste_romaneio AS romaneio ON romaneio.id_despesa = despesa.id
teste=# GROUP BY despesa.nome ORDER BY despesa.nome;
nome | executado_pedido | executado_romaneio
-----------+------------------+--------------------
despesa 1 | 1200 | 9000
despesa 2 | 900 | 6000
despesa 3 | 0 | 0
(3 rows)
juntando com 2 “JOINs” os valores saem errados (os totais de romaneios multiplicados pelo numero de pedidos e vice-versa) como faço pra acabar com essa “multiplicação matricial” aí?
valeu!