Apologies für den großen Code-Schnipsel, aber ich brauche, um sie anzuzeigen, die entsprechenden Ermittlungen zu zeigen, die ich zusammengestellt.eine Abfrage Kombination zeigt falsche Ergebnisse
Im Folgenden werden zwei separate Fragen haben, eine Prüfung für die Besatzungsmitglieder in einem bestimmten Flug vom Staging Schema (Staging.SabreAssignedCrew
) Tabelle und die andere ist ein Vergleich zu den Daten Schema Tabellen, in denen nach dem alle relevanten Tabellen Verbindungs zusammen, erhalte ich die Crew Informationen pro Flug:
Staging.SabreAssignedCrew
Tisch
SELECT
*
, Airline + CAST(FlightNumber AS VARCHAR) + Suffix AS StagingFlight
, ROW_NUMBER() OVER(PARTITION BY Airline + CAST(FlightNumber AS VARCHAR) + Suffix ORDER BY UpdateId DESC) AS StageRowNumber
FROM Staging.SabreAssignedCrew
WHERE Airline + CAST(FlightNumber AS VARCHAR) + Suffix = 'LS627' AND DepartureDate = '2016-09-04'
Data
Schema Tabellen
SELECT
cd.CrewUpdateID
, cd.IsPassive
, cd.CrewBase
, cd.CrewCategory
, cd.CrewType
, cd.EmployeeNumber
, cd.FirstName
, cd.LastName
, c.UpdateID
, c.LegKey
, c.UpdateReceived
, DataFlight
, l.ScheduledDepartureDate
, l.ScheduledDepartureAirport
FROM
(SELECT *, ROW_NUMBER() OVER(PARTITION BY LegKey ORDER BY UpdateID DESC) AS RowNumber FROM Data.Crew) c
INNER JOIN
Data.CrewDetail cd
ON c.UpdateID = cd.CrewUpdateID
AND cd.IsPassive = 0
AND RowNumber = 1
INNER JOIN
(SELECT *, Carrier + CAST(FlightNumber AS VARCHAR) + Suffix AS DataFlight FROM Data.Leg) l
ON c.LegKey = l.LegKey
WHERE DataFlight = 'LS627' AND ScheduledDepartureDate = '2016-09-04'
Die Ergebnisse beiden Abfragen zeigen, dass es 6 Besatzungsmitglieder (6 Zeilen) im Flug:
Nun, was ich zu tun versuchen, ist die Kombination der Abfragen zu einer Verwendung und Durchführung einer SUM, um sicherzustellen, dass die richtigen Besatzungsmitglieder an Bord des Fluges sind. Allerdings sind die Ergebnisse falsch, wie es unten outputd:
Wir wissen, gibt es 6 Besatzungsmitglieder im Flug, so sollte es für die Staging Schema 2 StagingCabinCrew
und 4 StagingCockpitCrew
und genau die gleiche Anzeige Werte für die Daten Schema. Dies alles wird durch das CrewType
Feld von beiden bestimmt Staging und Daten Schematische.
Ich gehe davon aus, dass ich in meiner kombinierten Abfrage etwas falsch mache, aber ich bin mir nicht sicher, was es ist, wenn die zwei oben genannten Abfragen in der kombinierten Abfrage die korrekten Ergebnisse anzeigen, aber das Ausführen der gesamten kombinierten Abfrage das falsche anzeigt Wert. Was muss behoben werden?
WITH CTE AS (
SELECT
cd.CrewUpdateID
, cd.IsPassive
, cd.CrewBase
, cd.CrewCategory
, cd.CrewType
, cd.EmployeeNumber
, cd.FirstName
, cd.LastName
, c.UpdateID
, c.LegKey
, c.UpdateReceived
, DataFlight
, l.ScheduledDepartureDate
, l.ScheduledDepartureAirport
FROM
(SELECT *, ROW_NUMBER() OVER(PARTITION BY LegKey ORDER BY UpdateID DESC) AS RowNumber FROM Data.Crew) c
INNER JOIN
Data.CrewDetail cd
ON c.UpdateID = cd.CrewUpdateID
AND cd.IsPassive = 0
AND RowNumber = 1
INNER JOIN
(SELECT *, Carrier + CAST(FlightNumber AS VARCHAR) + Suffix AS DataFlight FROM Data.Leg) l
ON c.LegKey = l.LegKey
WHERE DataFlight = 'LS627' AND ScheduledDepartureDate = '2016-09-04'
)
SELECT
StagingFlight
, sac.DepartureDate
, sac.DepartureAirport
, cte.DataFlight
, cte.ScheduledDepartureDate
, cte.ScheduledDepartureAirport
, SUM(CASE WHEN sac.CREWTYPE = 'F' THEN 1 ELSE 0 END) AS StagingCabinCrew
, SUM(CASE WHEN sac.CREWTYPE = 'C' THEN 1 ELSE 0 END) AS StagingCockpitCrew
, SUM(CASE WHEN cte.CrewType = 'F' THEN 1 ELSE 0 END) AS DataCabinCrew
, SUM(CASE WHEN cte.CrewType = 'C' THEN 1 ELSE 0 END) AS DataCockpitCrew
FROM
(
SELECT
*
, Airline + CAST(FlightNumber AS VARCHAR) + Suffix AS StagingFlight
, ROW_NUMBER() OVER(PARTITION BY Airline + CAST(FlightNumber AS VARCHAR) + Suffix ORDER BY UpdateId DESC) AS StageRowNumber
FROM Staging.SabreAssignedCrew--
WHERE Airline + CAST(FlightNumber AS VARCHAR) + Suffix = 'LS627' AND DepartureDate = '2016-09-04')
sac
LEFT JOIN CTE cte
ON StagingFlight = DataFlight
AND sac.DepartureDate = cte.ScheduledDepartureDate
AND sac.DepartureAirport = cte.ScheduledDepartureAirport
AND sac.CREWTYPE = cte.CrewType
WHERE StagingFlight = 'LS627' AND DepartureDate = '2016-09-04' AND StageRowNumber = 1
GROUP BY
StagingFlight
, sac.DepartureDate
, sac.DepartureAirport
, cte.DataFlight
, cte.ScheduledDepartureDate
, cte.ScheduledDepartureAirport
Bei begining versuchen Ihre qry viel einfacher zu machen - "Airline + CAST (Flugnummer AS VARCHAR) + Suffix" berechnet beharrte Spalte werden könnte - wird besser lesbar sein - schaffen agregation für die Besatzung (Gruppe von StagingFlight, sac.DepartureDate, sac.DepartureAirport) in temporäre Tabelle oder Sicht - Sie brauchen keine Zeilennummer in Ihrem Qry (Gruppe von wird genug sein) – Deadsheep39
@ deadsheep39 Möchten Sie Ihren Kommentar als Antwort, also wenn es funktioniert, ich kann markiere es? Ich weiß, wie man Ansichten oder Temp-Tabelle tut, aber kann auch ein Beispiel einschließen, damit andere sehen können. Danke – BruceyBandit