Hallo zusammen,
trotz intensiver Suche und Ausprobiererei finde ich keine Lösung für die folgende Aufgabe:
Ich habe vier Tabellen, die eine Menge enthalten, welche ich summieren muss. Dazu muss ich prinzipiell zweistufig Gruppieren.
Erst in der jeweiligen Tabelle selbst die Zeilen aufsummieren und anschließend die Summen erneut summieren.
Ersteres funktioniert, letzteres jedoch nicht - zumindest ist mir noch keine vom Delphi 7/BDE akzeptierte Syntax eingefallen.
Der Code sieht derzeit so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| DataModul.StatistikRohstoffSummenQuery.SQL.add('select Rohstoff, sum(menge)'); DataModul.StatistikRohstoffSummenQuery.SQL.add('FROM (select DISTINCT rl.ROHSTOFF ROHSTOFF, sum(rl.Menge) Menge'); DataModul.StatistikRohstoffSummenQuery.SQL.add('from Rohstofflager rl, Planetenatlas pa'); DataModul.StatistikRohstoffSummenQuery.SQL.add('WHERE rl.ORT=pa.NAME'); DataModul.StatistikRohstoffSummenQuery.SQL.add('AND pa.BESITZER='+CHR(39)+Aktiv_Spieler+CHR(39)); DataModul.StatistikRohstoffSummenQuery.SQL.add('group by rl.Rohstoff'); DataModul.StatistikRohstoffSummenQuery.SQL.add('UNION'); DataModul.StatistikRohstoffSummenQuery.SQL.add('select DISTINCT rl.ROHSTOFF, sum(rl.Menge) Menge'); DataModul.StatistikRohstoffSummenQuery.SQL.add('from Rohstofflager rl, SSTabelle ss'); DataModul.StatistikRohstoffSummenQuery.SQL.add('WHERE rl.ORT=ss.NAME'); DataModul.StatistikRohstoffSummenQuery.SQL.add('AND ss.BESITZER='+CHR(39)+Aktiv_Spieler+CHR(39)); DataModul.StatistikRohstoffSummenQuery.SQL.add('group by rl.Rohstoff'); DataModul.StatistikRohstoffSummenQuery.SQL.add('UNION'); DataModul.StatistikRohstoffSummenQuery.SQL.add('select DISTINCT rl.ROHSTOFF, sum(rl.Menge) Menge'); DataModul.StatistikRohstoffSummenQuery.SQL.add('from Rohstofflager rl, LSTabelle ls'); DataModul.StatistikRohstoffSummenQuery.SQL.add('WHERE rl.ORT=ls.NAME'); DataModul.StatistikRohstoffSummenQuery.SQL.add('AND ls.BESITZER='+CHR(39)+Aktiv_Spieler+CHR(39)); DataModul.StatistikRohstoffSummenQuery.SQL.add('group by rl.Rohstoff'); DataModul.StatistikRohstoffSummenQuery.SQL.add('UNION'); DataModul.StatistikRohstoffSummenQuery.SQL.add('select DISTINCT rl.ROHSTOFF, sum(rl.Menge) Menge'); DataModul.StatistikRohstoffSummenQuery.SQL.add('from Rohstofflager rl, Station st'); DataModul.StatistikRohstoffSummenQuery.SQL.add('WHERE rl.ORT=st.NAME'); DataModul.StatistikRohstoffSummenQuery.SQL.add('AND st.BESITZER='+CHR(39)+Aktiv_Spieler+CHR(39)); DataModul.StatistikRohstoffSummenQuery.SQL.add('group by rl.Rohstoff'); DataModul.StatistikRohstoffSummenQuery.SQL.add(')'); DataModul.StatistikRohstoffSummenQuery.SQL.add('GROUP BY ROHSTOFF'); DataModul.StatistikRohstoffSummenQuery.SQL.add('ORDER BY Menge DESC'); |
Zur Erklärung der Tabellen:
Die Tabelle Rohstofflager besteht aus den Spalten
ROHSTOFF, MENGE, ORT, ORTTYP
Der Ort ergibt sich aus den vier Tabellen SS, LS, Station und Planet.
Der ORT ist jeweils datenbankweit eindeutig.
Der Besitzer der MENGE ist nicht Teil der Tabelle Rohstofflager, so dass ich über die 4 Unterselects gehen muss, um nur dessen
Lager zu ermitteln (jede der vier Tabellen hat die Form: NAME, BESITZER, ...).
Welche Syntax wäre angebracht?
Die o.a. funktioniert nicht (er akzeptiert das select nach der Klammer nicht). Ich habe so ziemlich jede Syntax ausprobiert, die in meinen Augen gültig ist, leider ohne Erfolg. Und auf dem tagelangen Holzweg lasse ich mir gerne mal einen Tipp geben...
Viele Grüße & schonmal einen Guten Rutsch,
David
Lieber gut machen statt besser wissen.