2016-10-29 7 views
0

フライトレベルに行を表示し、そのフライトに乗った乗組員の数を表示するだけです。CTEでカウント/サムとグループを追加するには

飛行機レベルで1つのレコードしか表示しないように出力を変更したい場合は、2つの追加の列が表示されます。 1列(cabincrew)は'CREWTYPE' = 'F'の乗組員の数であり、もう1列(cockpitcrew)は `CREWTYPE '=' C 'の乗組員の数です。

だから、クエリの結果は次のようになります。私は、以下のクエリをしてくださいひねる少しの助けを持つことができます

Flight DepartureDate DepartureAirport CREWBASE CockpitCrew CabinCrew 
LS361 2016-05-19  BFS    BFS  0   3 

WITH CTE AS (
SELECT cd.*, c.*, l.Carrier, l.FlightNumber, l.Suffix, 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 
Data.Leg l 
ON c.LegKey = l.LegKey 
) 
SELECT 
    sac.Airline + CAST(sac.FlightNumber AS VARCHAR) + sac.Suffix AS Flight 
, sac.DepartureDate 
, sac.DepartureAirport 
, sac.CREWBASE 
, sac.CREWTYPE 
, sac.EMPNO 
, sac.FIRSTNAME 
, sac.LASTNAME 
, sac.SEX 
FROM 
Staging.SabreAssignedCrew sac 
LEFT JOIN CTE cte 
ON sac.Airline + CAST(sac.FlightNumber AS VARCHAR) + sac.Suffix = cte.Carrier + CAST(cte.FlightNumber AS VARCHAR) + cte.Suffix 
AND sac.DepartureDate = cte.ScheduledDepartureDate 

答えて

2

これを試してみてください。

SELECT Flight, 
      DepartureDate, 
      DepartureAirport, 
      CREWBASE, 
      SUM(CASE WHEN CREWTYPE = 'F' THEN 1 ELSE 0 END) AS CabinCrew , 
      SUM(CASE WHEN CREWTYPE = 'C' THEN 1 ELSE 0 END) AS CockpitCrew 
     FROM @Table 
    GROUP BY Flight, DepartureDate, DepartureAirport, CREWBASE 
3

これを試してみてください:

select Flight, DepartureDate, DepartureAirport,CREWBASE, 
count(case when CREWTYPE='F' then 1 end) as CabinCrew,count(case when CREWTYPE='C' then 1 end) as CockpitCrew 
from Staging.SabreAssignedCrew 
group by Flight, DepartureDate, DepartureAirport,CREWBASE 
関連する問題