SQL "transform"查询

标签 sql sql-server sql-server-2005 t-sql

我的表中有这些数据(使用 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/

相关文章:

sql-server - 新手 - 使用 CAST() 和 CONVERT() 时出错

sql-server - 无法找到哪一行导致转换错误

sql - LINKED 服务器不返回所有行

sql - 插入另一个表,然后从源表中删除

sql - 如何在 sql 2005 中搜索表?

SQL 左连接给出重复的结果

c# - EF Core/Sqlite 一对多关系因唯一索引约束而失败

mysql - 如何使用外键创建数据库

mysql - 标量子查询是否针对 MySQL 中的每个连接执行 where 条件?

java - Java 中是否有类或方法可以检查字符串是否为 SQL Server 关键字?