2010-01-26 4 views
2

나는 테이블에이 데이터가 (SQL Server 2005의 사용) :SQL "변환"쿼리

ID ParentID StartTime EndTime 
77 62   08:00:00  11:00:00 
78 62   12:00:00  15:00:00 
79 62   18:00:00  22:00:00 

을하고 나는이로 변환 할 :

ParentID BreakfastStart BreakfastEnd LunchStart LunchEnd DinnerStart DinnerEnd 
62  08:00:00  11:00:00  12:00:00 15:00:00 18:00:00  22:00:00 

이제 어려운 부분이다 : 어떤 레코드가 아침, 점심 또는 저녁인지 지정하는 다른 데이터 필드가 없다고 가정합니다. 시작 시간을 가장 짧게 설정하고 싶습니다. 즉, 시작 시간이 낮을수록 아침 식사를, 다음은 낮게 점심을 먹고 저녁 식사는 더 많이 먹을 것입니다.

아이디어가 있으십니까?

답변

3
WITH q AS 
     (
     SELECT *, ROW_NUMBER() OVER (PARTITION BY parentID ORDER BY StartTime) AS rn 
     FROM mytable 
     ) 
SELECT qb.ParentID, 
     qb.StartTime AS BreakfastStart, qb.EndTime AS BreakfastEnd, 
     ql.StartTime AS LunchStart, ql.EndTime AS LunchEnd, 
     qd.StartTime AS DinnerStart, qd.EndTime AS DinnerEnd 
FROM q qb 
LEFT JOIN 
     q ql 
ON  ql.parentID = qb.parentID 
     AND ql.rn = 2 
LEFT JOIN 
     q qd 
ON  qd.parentID = qb.parentID 
     AND qd.rn = 3 
WHERE qb.rn = 1 
+0

감사합니다. – djeidot