Einzelnen Beitrag anzeigen

Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#5

Re: [SQL] Problem mit doppelter Ergebnismenge

  Alt 7. Okt 2004, 09:18
Zitat von Hansa:
Meine Vermutung 8) :

pagid IN ("PIM5231","PIM5244") Mache mal da einen der beiden Werte weg, ob sich dann was ändert.
Ja na klar ändert sich da was, was ja auch nur sinnvoll und so gewollt ist Wenn ich allerdings nur einen Wert drin habe, sind die Summen im Ergebnis auch verdoppelt. Bereinigt wird das, wenn ich die Tabelle daten_prognose aus der FROM-clause wegnehme (s.a. unten für den Normalfall, der ja funktioniert).

Nochmal kurz zum Tabellendesign:

Ich habe 2 Tabellen mit Daten: ISTWERTE und PROGNOSEWERTE und eine Tabelle mit Beziehungen, welches Umsatz-/Kostenarten zu welcher Umsatz-/Kostengruppe gehören. Hier am Beispiel ist "2000" die Umsatzgruppe "Umsatz ohne interne Verrechnung" und dazu gehören die Umsatzarten "Umsatz Beratung, Umsatz Projekte, etc.".

In der einen Tabelle stehen von allen Kostenstellen einmal die Istwerte und in der anderen von allen Kostenstellen die Prognosewerte drin.

In meinem Programm gibt es 2 Sichten auf die Daten:

Der Kostenstellenverantwortliche kann sich seine Prognosewerte anschauen und es gibt eine gemixte Sicht, die die bisher vorliegenden Istwerte und "auffüllend" die Prognosewerte bis zum Jahresende anzeigt - auf dieser Ebene funktioniert die entsprechende SQL-Abfrage auch.

Jetzt gibt es aber aber auch Geschäftsbereichsleiter, die es interessiert, welche Zahlen der Geschäftsbereich hat und diese setzen sich aus den Kostenstellen zusammen.

Für die Prognosesicht funktioniert ein analoges SQL-Statement, für diese gemixte Ist/Prognose-Sicht leider nicht.

Zu dem IN-Statement: Ein Geschäftsbereich hat x Kostenstellen. Genau diese x Kostenstellen sind in der DB hinterlegt und werden im IN-Statement abgefragt.

Hier ist das SQL-Statement für die Aggregation der PROGNOSEWERTE, die fehlerfrei funktioniert:
Delphi-Quellcode:
frmMain.ZQPOS.SQL.Add('SELECT p.posid, p.posbez, ');
frmMain.ZQPOS.SQL.Add('SUM(JAN) AS JAN, SUM(FEB) AS FEB, SUM(MAR) AS MAR, SUM(APR) AS APR, SUM(MAI) AS MAI, SUM(JUN) AS JUN, SUM(JUL) AS JUL, SUM(AUG) AS AUG, SUM(SEP) AS SEP, SUM(OKT) AS OKT, SUM(NOV) AS NOV, SUM(DEZ) AS DEZ, ');
frmMain.ZQPOS.SQL.Add('SUM(JAN_1) AS JAN_1, SUM(FEB_1) AS FEB_1, SUM(MAR_1) AS MAR_1, SUM(APR_1) AS APR_1, SUM(MAI_1) AS MAI_1, SUM(JUN_1) AS JUN_1 ');
frmMain.ZQPOS.SQL.Add('FROM positionen p, daten_prognose i ');
frmMain.ZQPOS.SQL.Add(Format('WHERE p.pgid=:pgid AND p.posid=i.position AND i.pagid IN (%s) ', [strDataID]));
frmMain.ZQPOS.SQL.Add('GROUP BY p.posid');
Und hier das SQL-Statement für die gemixte Sicht (Ist/Prognose) auf Kostenstellenebene (also nur für eine Kostenstelle), welche auch fehlerfrei funktioniert:

Delphi-Quellcode:
ZQPOS.SQL.Add('SELECT DISTINCT i.position, pos.posbez, ');
ZQPOS.SQL.Add(strIstPlan);
ZQPOS.SQL.Add('FROM daten_ist i, daten_prognose p, positionen pos ');
ZQPOS.SQL.Add('WHERE i.position=p.position AND i.position=pos.posid ');
ZQPOS.SQL.Add('AND i.pagid=:pagid AND pos.pgid=:pgid');
(in strIstPlan steht die generierte Monatsauswahl Plan/Ist, wie im ersten Post drin)

Wie gesagt, vermute ich, dass durch die Tabellenkreuzung im ursprünglichen Post irgendwas doppelt durchlaufen wird.

Gruß Igotcha
  Mit Zitat antworten Zitat