![]() |
Datenbank: ADS • Version: 10 • Zugriff über: Delphi
Hilfe bei SQL
Hi hänge grad bei einem SQL
Hier erstmal der SQL: Dieser liefert mir bisher alle gebuchten Aufträge eines Mitarbeits zurück.
SQL-Code:
Ich möchte das Ergebnis noch gruppieren. Es kann nämlich auch sein, dass ein Mitarbeiter mehrmals den selben Auftrag anbucht.
SELECT
Auftrag.Nummer, Auftrag.Bezeichnung, Buchungen.BSumme, ZMIF.MinToHour(Buchungen.BSumme) as StdMin, ZMIF.MinToIHour(Buchungen.BSumme) as Dez, Personal.Name, Personal.Vorname, Personal.ID, (SELECT Min(Datum) FROM Buchungen) AS DatumVon, (SELECT Max(Datum) FROM Buchungen) AS DatumBis FROM Auftrag LEFT OUTER JOIN Buchungen ON Auftrag.Nummer = Buchungen.AuftragNr LEFT OUTER JOIN Personal Personal ON Buchungen.ID_Personal = Personal.ID WHERE Buchungen.ID IS NOT NULL AND Buchungen.Datum >= '01.01.2011' AND Buchungen.Datum <= '01.08.2012' ORDER BY Name, Vorname, Auftrag.Nummer; So siehts bisher aus: Zitat:
Zitat:
|
AW: Hilfe bei SQL
Am einfachsten deine Abfarge als Derived Table weiter Gruppieren:
SQL-Code:
select
AuftragNr, sum( Buchungssumme), name from <Deine Abfrage> group by AuftragNr, Name; |
AW: Hilfe bei SQL
Haut das hier hin?
SQL-Code:
SELECT
A.Nummer AS Auftragnr, SUM(B.BSumme) AS Buchungssumme, P.Name AS Name FROM Auftrag A LEFT JOIN Buchungen B ON B.AuftragNr = A.Nummer LEFT JOIN Personal P ON P.ID = B.ID_Personal WHERE B.ID IS NOT NULL AND B.Datum BETWEEN '01.01.2011' AND '01.08.2012' GROUP BY A.Nummer, P.Name ORDER BY A.Nummer, P.Name |
AW: Hilfe bei SQL
super, das wars, besten dank und ein schönes Wochenende !!
|
AW: Hilfe bei SQL
Fragt sich nur noch, warum das Outer-Joins sind?
SQL-Code:
Da B in der Where-Klausel und P in der Group-By-Klausel auftritt, können nur Zeilen im Ergebnis vorkommen, die in allen drei Tabellen vorkommen. Und das ist dann automatisch jeweils ein Inner-Join.
SELECT A.Nummer AS Auftragnr,
SUM(B.BSumme) AS Buchungssumme, P.Name AS Name FROM Auftrag A INNER JOIN Buchungen B ON A.Nummer = B.AuftragNr INNER JOIN Personal P ON B.ID_Personal = P.ID WHERE B.Datum BETWEEN '01.01.2011' AND '01.08.2012' GROUP BY A.Nummer, P.Name ORDER BY A.Nummer, P.Name Edit: und dann auch noch B.ID IS NOT NULL. Wenn ID in B der PK ist, dann ist das ein Inner-Join. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz