2017-01-25 3 views
0

Ich verwende ein ERP, das einen halb "grafischen" SQL-basierten Report Writer hat.Summe verschiedener Zeilen

Die Art und Weise, wie unsere Software funktioniert, ist, dass Produkte "Master" oder "Mitglieder" sein können (oder auch nicht, aber lassen Sie das für jetzt ignorieren). Im Wesentlichen kann ein Produkt das "Elternteil" einer Gruppe oder ein "Kind" einer anderen Produktgruppe sein. Also sagen Sie in der folgenden Tabelle haben:

|---------------------|------------------|------------------| 
|  Product  | ProductMaster |  Quantity  | 
|---------------------|------------------|------------------| 
|   A   |     |  200  | 
|---------------------|------------------|------------------| 
|   A1   |   A  |  50  | 
|---------------------|------------------|------------------| 
|   A2   |   A  |  50  | 
|---------------------|------------------|------------------| 
|   A3   |   A  |  25  | 
|---------------------|------------------|------------------| 

Produkt A ist der Meister, die anderen sind Mitglieder von A.

Was Ich mag würde zu tun ist, eine Zeile pro Produkt, das die Mengen von Masters kombiniert und alle ihre Mitglieder (in diesem Fall eine Zeile mit Quantity = 325), und ich kann nicht herausfinden, wie es geht. Ich kann die Summe aller Mitglieder bekommen, indem ich Group By ProductMaster setze, aber dann stecke ich fest.

Antwort

1

Unter der Annahme, dass es nur eine Ebene der Tiefe ist, können Sie coalesce() verwenden:

select coalesce(ProductMaster, Product) as ProductMaster, sum(Quantity) 
from t 
group by coalesce(ProductMaster, Product); 

Hinweis: Dies setzt voraus, dass leer bedeutet NULL. Wenn es etwas anderes bedeutet, dann wirst du eine CASE anstelle von COALESCE() wollen.

+0

Danke Gordon. Auf einer Ebene der Tiefe meinst du, dass ein Meister eine Gruppe von Mitgliedern hat und Mitglieder nicht selbst Meister sein können? Denn ja, ich glaube, das ist der Fall. Ich werde deinen Vorschlag versuchen. – wysiwyg

+0

Und das funktioniert. Jetzt muss ich herausfinden, was Coalesce genau macht. Vielen Dank! – wysiwyg