组合 SQL 中同一列中的行
Posted
技术标签:
【中文标题】组合 SQL 中同一列中的行【英文标题】:combining Rows in SQL which are in the same column 【发布时间】:2022-01-17 19:44:33 【问题描述】:我正在尝试将两列合并为两行。我无法用 PIVOT 表解决它。 我的桌子是这样的
name | status | timestamp
212 50 t1
213 50 t2
212 60 t3
213 60 t4
我想要什么
name | starttime | stoptime
212 t1 t2
213 t3 t4
【问题讨论】:
你能更详细地解释一下这背后的逻辑吗?为什么 212 在 t2 停止?为什么 213 从 t3 开始? 可以使用聚合,按名称分组。 您真的还在使用 SQL Server 2005 吗?这已经完全不支持了大约 5 年;你真的需要理清你的升级路径。我们中的许多人不记得我们认为理所当然的支持(或更糟糕的是,不支持)的功能是什么,因为我们已经有很多年没有接触过这么旧的产品了。不早点升级只会让以后更难升级。 您的样本数据和所需的输出似乎混淆了。更糟糕的是,您似乎期望这里的数据有某种顺序,因为您有开始和停止。但是在您的数据中没有任何指示顺序。提供一些有意义的样本数据,帮助他人理解您的问题。 【参考方案1】:如果我们假设表名是 TimeSheet 并且表已经有一个自动递增的 ID,那么你可以使用这样的东西:
SELECT TSS.Name,
(
SELECT TOP (1)
TS.timestamp
FROM TimeSheet TS
WHERE TS.Name = TSS.Name
ORDER BY TS.ID ASC
) AS Starttime,
(
SELECT TOP (1)
TS.timestamp
FROM TimeSheet TS
WHERE TS.Name = TSS.Name
ORDER BY TS.ID DESC
) AS Endtime
FROM TimeSheet TSS
GROUP BY TSS.Name
【讨论】:
我完全明白了你,但状态很重要。根据状态,必须安排时间戳。开始时间表示状态 50,停止时间表示状态 60。以上是关于组合 SQL 中同一列中的行的主要内容,如果未能解决你的问题,请参考以下文章