对于大片段代码的道歉,但我需要显示它们以显示我已编译的相关调查。结合查询显示不正确的结果
下面我有两个单独的查询,从分期架构(Staging.SabreAssignedCrew
)表和其他特定的飞行机组成员的一个检查是对数据的比较模式中的表,其中连接所有相关表格后,在一起,我得到每次飞行机组人员信息:
Staging.SabreAssignedCrew
表
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
模式表
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'
两个查询的结果显示,有6名机组人员(6行)在飞行:
现在我所要做的将查询合并为一个使用并执行SUM以确保正确的船员在航班上。然而,结果是不正确的,因为它下面outputd:
我们知道,在飞行6名机组人员,因此它应该显示为分期模式2 StagingCabinCrew
和4 StagingCockpitCrew
完全一样值为数据架构。这全由CrewType
字段确定,这两个字段来自分段和数据模式表。
我假设我在我的联合查询中做了一些错误,但我不确定它是如何在组合查询中单独运行上述两个查询来显示正确的结果,但执行整个组合查询显示错误值。什么需要解决?
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
在begining试着让你的QRY更容易 - “航空+ CAST(FLIGHTNUMBER AS VARCHAR)+后缀”可以计算持久列 - 将更具可读性 - 由StagingFlight创建船员agregation(组出发日期,sac.DepartureAirport)到临时表或查看 - 你不需要在你的qry中使用row_number(group by will be enough) – Deadsheep39
@ deadsheep39你想坚持你的评论作为答案,所以如果它的工作,我可以标记它?我知道如何做视图或临时表,但也可以包含一个供其他人看的例子。谢谢 – BruceyBandit