AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Join mit Aggregatfunktion ?
Thema durchsuchen
Ansicht
Themen-Optionen

Join mit Aggregatfunktion ?

Ein Thema von HendrikM · begonnen am 25. Okt 2005 · letzter Beitrag vom 26. Okt 2005
Antwort Antwort
HendrikM

Registriert seit: 30. Aug 2005
Ort: Berlin
49 Beiträge
 
#1

Join mit Aggregatfunktion ?

  Alt 25. Okt 2005, 12:51
Datenbank: MS SQL Server 2000 • Zugriff über: ADO
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
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Join mit Aggregatfunktion ?

  Alt 25. Okt 2005, 19:24
A.Wert wird für jede Datenzeile summiert. Also A*B.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Join mit Aggregatfunktion ?

  Alt 25. Okt 2005, 20:05
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
  Mit Zitat antworten Zitat
HendrikM

Registriert seit: 30. Aug 2005
Ort: Berlin
49 Beiträge
 
#4

Re: Join mit Aggregatfunktion ?

  Alt 26. Okt 2005, 05:26
Zitat von Union:
A.Wert wird für jede Datenzeile summiert. Also A*B.
Aha und was kann man dagegen machen, ?
Hendrik
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Join mit Aggregatfunktion ?

  Alt 26. Okt 2005, 07:07
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
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
HendrikM

Registriert seit: 30. Aug 2005
Ort: Berlin
49 Beiträge
 
#6

Re: Join mit Aggregatfunktion ?

  Alt 26. Okt 2005, 07:14
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
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Join mit Aggregatfunktion ?

  Alt 26. Okt 2005, 07:21
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 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
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:54 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