繁体   English   中英

组合查询会显示不正确的结果

[英]Combining a query displays incorrect results

为代码的大片段道歉,但我需要显示它们以显示我编译的相关调查。

下面我有两个单独的查询,一个是从登台模式( 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以确保正确的机组成员在飞行中。 但是,结果不正确,因为它输出如下:

在此输入图像描述

我们知道该航班中有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
  1. 为stagingflight创建列(您可能会使用apropriete索引)。 请始终设置varchar的大小(例如varchar - > varchar(30))。

     alter table staging.sabreassignedcrew add stagingflight as cast(airline + cast(flightnumber as varchar(5)) + suffix as varchar(25)) persisted 
  2. 创建视图。

     CREATE VIEW Staging.vw_SabreAssignedCrewCount AS SELECT StagingFlight, DepartureDate, COUNT(DISTINCT CASE WHEN sac.CREWTYPE = 'F' THEN EmployeeNumber END) AS StagingCabinCrewCnt, COUNT(DISTINCT CASE WHEN sac.CREWTYPE = 'C' THEN EmployeeNumber END) AS StagingCockpitCrewCnt FROM Staging.SabreAssignedCrew GROUP BY StagingFlight, DepartureDate 

第二个表的第二个视图。

  1. 你不需要rownumbers,CTE。 只能轻松加入2个分组选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM