2

MSSQL 2012 で次のクエリを使用しています。

declare @startTime int=0*3600;
declare @endTime int=30*3600;
declare @link varchar(10)='RO2566a';
declare @period int=3600; 

SELECT (B.time-@startTime)/@period as periodStart, B.link, B.mode, count(*) as Volume
  FROM
       (
       Select A.*, 
             case when A.vehicle='' then 'walk' 
                  when A.line is NULL then 'car'
                    else 'pt' end mode

             FROM 
             (Select E.time, E.link, E.vehicle, E.person, T.transitLineId as line, T.transitRouteId as route, T.departureId, T.time as DepartureTime
                    FROM (Select * From evtEnteredLink  where link=@link and time between @startTime and @endTime) E
                 LEFT OUTER JOIN evtTransitDriverStarts T on (E.vehicle=T.vehicleId) 
             ) A
             where A.time between @startTime and @endTime
       )B
       group by B.link, B.mode, (B.time-@startTime)/@period

結果は次のとおりです。

periodStart mode    Volume
0       pt  19
1       pt  24
2       pt  24
3       car 4
3       pt  25
4       car 64
4       pt  27

必要なものは次のようになります - foreach 期間 (行) モードごとの集計ボリューム (列) に興味があります。

PeriodStart car pt  
0               19
1               24
2               24
3           4   25
4           64  27

これは、MSSQL 2012 のピボット機能を使用してどのように実現できますか? 列 (モード) を動的に取得し、クエリ自体で定義しないことは可能ですか?

4

2 に答える 2