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