2017-04-18 5 views
1

ピボット関数に似たものを探しています ユーザーの日付範囲を示す表がありますが、ユーザーが一定期間。sqlは新しいテーブルの行と列を繰り返す

Id |ユーザーID | BeginingTime | EndTime | DateApplied
--- | ---------- | -------------- | ---------------- | ------------------
1 | 63 | 08:00 | 10:00 | 01-01-2017
2 | 63 | 10:00 | 10:40 | 01-01-2017
3 | 63 | 11:00 | 12:00 | 03-01-2017
4 | 63 | 14:30 | 15:30 | 04-01-2017
5 | 63 | 13:00 | 13:30 | 03-01-2017

私は1日に2つの権限しか持てないことを知っています。同じ日付のものを新しいテーブルにグループ化する必要があります。

データは次のようになります。

UserId | ID1 | BeginTime1 | EndTime1 | ID2 | BeginTime2 | EndTime2 | DateApplied
--------- | ------- | ----------- | ------- | --- | ----------- | -------- | ------------
63 | 1 | 08:00 | 10:00 | 2 | 10:00 | 10:40 | 01-01-2017
63 | 3 | 11:00 | 12:00 | 5 | 13:00 | 13:30 | 03-01-2017
63 | 4 | 14:30 | 15:30 | null | null |ヌル|

答えて

0

あなたは、あなたは、単にCTEと左を使用することができる一日あたりのユーザーごとに最大2回の記録でグループしようとしている知っているので、2017年4月1日には、参加:

;WITH p AS (
    SELECT Id, UserId, BeginingTime, EndTime, DateApplied, 
     ROW_NUMBER() OVER (PARTITION BY UserId, DateApplied ORDER BY BeginingTime) AS RowNo 
    FROM SourceTable 
) 
SELECT p1.UserId, p1.Id as ID1, 
     p1.BeginingTime AS BeginingTime1, p1.EndTime AS EndTime1, 
     p2.Id as ID2, 
     p2.BeginingTime AS BeginingTime2, p2.EndTime AS EndTime2, 
     p1.DateApplied 
FROM p p1 LEFT JOIN p p2 
      ON p1.UserId = p2.UserId AND p1.DateApplied = p2.DateApplied AND p2.RowNo = 2 
WHERE p1.RowNo = 1 
関連する問題