ich eine Datenbank von "Reisen" mit dem folgendenSQL - 1 Spalte Zweimal in der SELECT-Anweisung für verschiedene Werte
TripParent
- Id
- DrivingCompany
- Kunden erstellt habe
TripDetails
- Id
- Destination
- PlannedArrivalDate
StatusLog
- Id
- CatStatusId (Kommt aus einer anderen Tabelle nur mit den Namen)
- DateTimeModified
Lassen Sie mich die Tabellen erklären, zuerst versteckte ich andere Felder, um es einfach zu halten, die "Eltern" Tabelle hat viele TripDetails, so ist es nur eine Zusammenfassung für die vielen "Details" es hat. Die TripDetails Tabelle 1 Zeile für 1 Ziel, sagen wir die Reise wird von A nach C, dann haben wir eine Zeile für jeden "Stopp" (A, B, C). Und dann haben wir die StatusLog-Tabelle, die viele Zeilen für jede "TripDetails" hat.
Das Problem ist, ich brauche eine gespeicherte Prozedur, die DrivingCompany, Client, PlannedArrivaldate, RealArrivalDate und RealDepartureDate zurückgibt.
Die "Real Dates" stammen aus der StatusLog-Tabelle. Status 1 bedeutet, dass der Lkw das Ziel (A/B/C) erreicht hat und der Status 2 bedeutet, dass er diesen Standort verlassen hat.
Bisher habe ich folgendes
SELECT
TP.DrivingCompany, TP.Client, TD.PlannedArrivalDate,
'Real Arrival Date' = CASE SL.CatStatusId
WHEN 1 THEN SL.DateTimeModified
ELSE NULL
END,
'Real Departure Date' = CASE SL.CatStatusId
WHEN 2 THEN SL.DateTimeModified
ELSE NULL
END
FROM
TripParent TP
JOIN
TripDetails TD ON TD.TripParentId = TE.Id
JOIN
StatusLog SL ON SL.TripDetailsId = TD.Id
GROUP BY
TP.Id
ORDER BY
TD.Id
wird mit dem CASE der richtige Weg, um die gleiche Spalte zweimal in der SELECT-Anweisung zu zeigen? Ich denke, ich bin auf dem richtigen Weg, aber ich kann nicht gruppieren von TP.Id und ich muss auch zeigen alle Zeilen, die von dieser Abfrage gehen, Es zeigt nicht die "TripDetails", die kein " StatusLog "Zeile, weil sie nicht angekommen sind.
Jede Hilfe ist willkommen
Danke, das LINKE JOIN gibt mir die Zeilen auch wenn es kein Protokoll gibt.Über die GROUP-Klausel, selbst wenn ich die TP.Id in die SELECT setzen, erhalte ich diesen Fehler: ** Spalte 'TP.DrivingCompany' ist in der Auswahlliste ungültig, weil sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel. ** Dies ist ein Beispiel für meine [DATEN] (https://i.redd.it/vnlkrhhqgf2z.png) Die 2 letzten Zeilen sollten in 1 angezeigt werden, um das Real Arrival Date und Echtes Abfahrtsdatum zusammen – Martin
Siehe geänderte Antwort. – IngoB