我的表中有这些数据(使用 SQL Server 2005):
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
现在最困难的部分是:假设我没有其他数据字段指定哪条记录是早餐、午餐或晚餐。我想将它们与最低的开始时间相关联,即较低的开始时间是早餐,较低的开始时间是午餐,较高的开始时间是晚餐(假设所有三个(且只有三个)记录总是被填满)。
有什么想法吗?
最佳答案
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
关于SQL "transform"查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2140958/