表 1 (Resv)
ResvID | ResvDateTime | BufferInd
-----------------------------------------------
1 | 2012-06-11 08:30:00.000 | 1
2 | 2012-06-11 08:30:00.000 | 2
4 | 2013-07-20 12:00:00.000 | 1
5 | 2013-07-20 12:00:00.000 | 2
注: ResvID(int identity)
、ResvDateTime(datetime)
表 2 (バッファ)
BufferInd | BufferPeriod (minutes)
---------------------------------
1 | 60
2 | 120
注: BufferInd(int)
、BufferPeriod(int)
pivot
SQLビューで以下の両方の結果を使用して、これら2つのテーブルを結合したいと思います
ResvID | ResvDateTime | BufferInd1 | BufferInd2
---------------------------------------------------------------------
1 | 2012-06-11 08:30:00.000 | 1 | 2
2 | 2013-07-20 12:00:00.000 | 1 | 2
.
ResvID | ResvDateTime | DateTimeAfterOneHour | DateTimeAfterTwoHour
--------------------------------------------------------------------------------------
1 | 2012-06-11 08:30:00.000 | 2012-06-11 09:30:00.000 | 2012-06-11 10:30:00.000
2 | 2013-07-20 12:00:00.000 | 2013-07-20 13:00:00.000 | 2013-07-20 14:00:00.000
ノート:
DateTime1 = DateAdd(hour, BufferPeriod/60, ResvDateTime)
WHEREBufferInd = 1
DateTime2 = DateAdd(hour, BufferPeriod/60, ResvDateTime)
WHEREBufferInd = 2
そして、これはテーブル内のすべての変数を宣言する私の試みですが、失敗しました。
Create Table Resv
([ResvID] int, [BufferTypeInd] int ,[ResvDT] datetime, [BufferPeriod] int)
;
Insert Into Resv
([ResvID], [BufferTypeInd], [ResvDT], [BufferPeriod])
Values
(1, 1, '2012-06-11 08:30:00.000', 60),
(2, 2, '2012-06-11 08:30:00.000', 180),
(4, 1, '2013-07-20 12:00:00.000', 60),
(5, 2, '2013-07-20 12:00:00.000', 180),
;
私のピボットトライ:
SELECT *
FROM
(
(SELECT
[BufferTypeInd], [ResvDT], [BufferPeriod]
FROM Resv)
) AS source
PIVOT
(
MAX([ResvDT])
FOR [BufferTypeInd] IN ([1],[2],[3])
) as pvt;
SELECT ResvID,
MAX(
CASE WHEN
BufferTypeInd = '1'
THEN
DateAdd(hour, BufferPeriod, ResvDT)
ELSE
NULL
END) [1],
MAX(
CASE WHEN
BufferTypeInd = '2'
THEN
DateAdd(hour, BufferPeriod, ResvDT)
ELSE
NULL
END) [2]
FROM Resv
GROUP BY ResvID
私の問題を指摘し、ピボットと集計機能をどのように行うべきかを教えてください.ありがとう.