2017-12-29 7 views
0

I Problem in SQL habe unter:Wählen Sie in Postgresql mit SUM Projekt Agregate

  1. Das Feld mdoc_valor kann nicht duplizieren oder hinzufügen, da es ein einzelner Wert ist und nicht Teil der Aggregation nur die mprd_valor Feld sollte hinzugefügt werden, wie es in einer Tochtertabelle ist. Das heißt, das Feld befindet sich in der übergeordneten Tabelle und das Feld mprd_valor befindet sich in einer untergeordneten Tabelle.

  2. Was passiert ist, dass das Feld mdoc_valor Werte nach Aggregation hinzufügen und ich möchte nicht, dass dieses Feld geändert wird.


select dpto_codigo, 
     dpto_descricao, 
     sum(mdoc_valor) as Liquido, 
     sum(mprd_valor) as Compras_Bruta 
from movdctos 
inner join movprodd1017 on (mdoc_transacao=mprd_transacao) 
inner join produtos on (prod_codigo=mprd_prod_codigo) 
inner join departamentos on (prod_dpto_codigo=dpto_codigo) 
where mdoc_datamvto>=CAST('2017-10-31' AS DATE) and 
mdoc_datamvto<=CAST('2017-10-31' AS DATE) and 
mdoc_dcto_tipo in ('EAQ') 
group by 
dpto_codigo, 
dpto_descricao 
+0

Geben Sie Beispieldaten an, bei denen Sie das Verhalten erhalten, das Sie nicht möchten. Schreiben Sie Ihr SQL neu, um immer 'table.field' zu verwenden, damit * us * nachvollziehen kann, was von wo kommt. – MatBailie

Antwort

0

Basierend auf Tabellennamen und Ihre Fragen, so scheint es, dass Sie nicht das mdoc_valor Feld summieren müssen. Ich habe die Aggregation aus diesem Feld entfernt, sie der GROUP BY hinzugefügt und Aliasing von Tabellen hinzugefügt, um die Lesbarkeit zu verbessern.

select dpto.dpto_codigo, 
    dpto.dpto_descricao, 
    mdoc.mdoc_valor as Liquido, 
    sum(mprd.mprd_valor) as Compras_Bruta 
from movdctos mdoc 
inner join movprodd1017 mprd on (mdoc.mdoc_transacao=mprd.mprd_transacao) 
inner join produtos prod on (prod.prod_codigo=mprd.mprd_prod_codigo) 
inner join departamentos dpto on (prod.prod_dpto_codigo=dpto.dpto_codigo) 
where mdoc.mdoc_datamvto>=CAST('2017-10-31' AS DATE) and 
mdoc.mdoc_datamvto<=CAST('2017-10-31' AS DATE) and 
mdoc.mdoc_dcto_tipo in ('EAQ') 
group by 
dpto.dpto_codigo, 
dpto.dpto_descricao, 
mdoc.mdoc_valor; 

für jede Kombination von dpto_codigo, dpto_descricao und mdoc_valor (umbenannt in Liquido) Dies sollte Ihnen SUM(mprd_valor) geben.

+0

Sicher. Verbesserte sie. – Vashi

Verwandte Themen