组合 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 中同一列中的行的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将多个 SQL 列组合并存储到一个列中

如何链接多个组合框表中的两个组合框?

SQL 查询将多条记录中的值组合到单个列中

pandas中的SQL查询:根据其他列的组合在列中连接多行

如何将 SQL 中的 2 个表与 1 个公共列组合在一起,而其他列中没有关系?

通过唯一标识符组合查询结果的行?