Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Join mit Aggregatfunktion ? (https://www.delphipraxis.net/55686-join-mit-aggregatfunktion.html)

HendrikM 25. Okt 2005 12:51

Datenbank: MS SQL Server 2000 • Zugriff über: ADO

Join mit Aggregatfunktion ?
 
Hallo Freunde des DP - Forums,
ich habe da mal ne Frage:
ich habe 2 Tabellen, in einer stehen die geplanten und geleisteten Arbeitsstunden (B) drin (noch divers aufgeschüsselt) in der anderen Tabelle sind die Anwesenheit der Mitarbeiter pro Tag (A) (bzw. ihre Abwesenheit) enthalten.
Ich will nun diese 3 Werte für die letzten 6 Tage mit einer sp anzeigen:

select A.Datum, SUM(B.MHPLAN) as PLANAH, SUM(B.MHISTBDE3) as IST_AH,
SUM(cast(A.Wert as dec(9,0))) as Kapazitaet
from UPLAN_MAIN A
join MGSI B
on A.Datum=B.Datum
where isnumeric(A.Wert)=1
and A.Datum<=GetDate() and A.Datum>=GetDate()-6
Group by A.Datum

Die sp läuft durch, es stehen aber unmögliche Werte drin.
Was ist falsch?
Hendrik

Union 25. Okt 2005 19:24

Re: Join mit Aggregatfunktion ?
 
A.Wert wird für jede Datenzeile summiert. Also A*B.

omata 25. Okt 2005 20:05

Re: Join mit Aggregatfunktion ?
 
Moin,

ich habe keine Ahnung was du da vorhast bzw. was da falsch läuft.
Aber ich würde einfach mal eine übersichtlichere Darstellung wählen, dann kann man dir auch besser helfen. Wenn es um Tagesberechnungen geht, würde ich nicht einfach eine Zahl addieren oder abziehen. Dafür ist DATEADD da. Einen Bereich kann man sehr gut mit BETWEEN eingrenzen.
Und schon ist die Anweisung vielleicht mit einem Blick verständlich.

SQL-Code:
SELECT a.datum,

       SUM(b.mhplan) AS planah,
       SUM(b.mhistbde3) AS ist_ah,
       SUM(CAST(a.wert AS DEC(9, 0))) AS kapazitaet
FROM uplan_main a
INNER JOIN mgsi b
  ON a.datum = b.datum
WHERE ISNUMERIC(a.wert) = 1
  AND a.datum BETWEEN DATEADD(dd, -6, GETDATE()) AND GETDATE()
GROUP BY a.datum
MfG
Thorsten

HendrikM 26. Okt 2005 05:26

Re: Join mit Aggregatfunktion ?
 
Zitat:

Zitat von Union
A.Wert wird für jede Datenzeile summiert. Also A*B.

Aha und was kann man dagegen machen, ?
Hendrik

Flocke 26. Okt 2005 07:07

Re: Join mit Aggregatfunktion ?
 
Wenn die Ergebnisse nicht stimmen, dann ist vielleicht die Join-Bedingung nicht vollständig bzw. richtig und lässt zu viele Kombinationen zu.

Schaue dir das Ergebnis mal ohne die Summe an:
SQL-Code:
select A.Datum, B.MHPLAN, B.MHISTBDE3, A.Wert
from UPLAN_MAIN A
join MGSI B
on A.Datum=B.Datum
where isnumeric(A.Wert)=1
and A.Datum<=GetDate() and A.Datum>=GetDate()-6
order by A.Datum

HendrikM 26. Okt 2005 07:14

Re: Join mit Aggregatfunktion ?
 
Zitat:

Zitat von Flocke
Wenn die Ergebnisse nicht stimmen, dann ist vielleicht die Join-Bedingung nicht vollständig bzw. richtig und lässt zu viele Kombinationen zu.

Schaue dir das Ergebnis mal ohne die Summe an:
SQL-Code:
select A.Datum, B.MHPLAN, B.MHISTBDE3, A.Wert
from UPLAN_MAIN A
join MGSI B
on A.Datum=B.Datum
where isnumeric(A.Wert)=1
and A.Datum<=GetDate() and A.Datum>=GetDate()-6
order by A.Datum

ja das ist ja ganz nett wenn ich jetzt wie eben ausprobiert über 17.000 records bekomme wo ich eigentlich nur 6 haben will.
Deshalb noch mal meine Frage:
" Ist ein join über Tabellen mit jeweiligen Aggregatfunktionen überhaupt möglich?
Wenn ja, wie???"
Hendrik

Flocke 26. Okt 2005 07:21

Re: Join mit Aggregatfunktion ?
 
Zitat:

Zitat von HendrikM
ja das ist ja ganz nett wenn ich jetzt wie eben ausprobiert über 17.000 records bekomme wo ich eigentlich nur 6 haben will.

Ich verstehe deine Antwort nicht ganz. Ich wollte dir eine Hilfestellung geben, falsche Kombinationen in der Join-Abfrage zu finden. Wenn du jetzt 17.000 Records siehst, dann summiert deine erste Abfrage insgesamt 17.000 Sätze auf ... und das wird wohl der Fehler sein.

Gehören die Sätze denn alle zusammen? Ich meine jetzt Fehler wie dass es aus UPLAN_MAIN mehrere Sätze für ein Datum geben kann, beim Join aber jedem Datem alle Sätze aus MGSI zugeordnet werden, auch die die eigentlich nicht dazu gehören. Wenn dies so ist, dann fehlt eine Bedingung im Join.

Zitat:

Zitat von HendrikM
Deshalb noch mal meine Frage:
" Ist ein join über Tabellen mit jeweiligen Aggregatfunktionen überhaupt möglich?
Wenn ja, wie???"
Hendrik

1. Sicher
2. Genau so wie du es tust


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz