sql - 将 2 个日期行合并为 1 行中的 2 列

标签 sql sql-server t-sql

我有 1 个包含时间记录的表,类型为 1 和 2。我希望它们合并为 1 行。

我期待 log_type 1,但没有 log_type 2 伙伴。预期结果是:

A | 2017-02-01 08:00:00.000 | 2017-02-01 08:10:00.000
A | 2017-02-01 08:30:00.000 |
A | 2017-02-01 08:40:00.000 | 2017-02-01 08:50:00.000
A | 2017-02-01 09:00:00.000 |

这是我的脚本:

create table test_time
(
    person varchar(30)
    ,log_time datetime
    ,log_type int
)

insert into test_time
values
('A','2017-02-01 8:00:00',1)
,('A','2017-02-01 8:10:00',2)
,('A','2017-02-01 8:30:00',1)
,('A','2017-02-01 8:40:00',1)
,('A','2017-02-01 8:50:00',2)
,('A','2017-02-01 9:00:00',1)

而且,我应该能够与其他人打交道。我已经尝试了 ROW_NUMBER,但我陷入困境。预先感谢您。

最佳答案

我会尝试以下查询(未经测试):

SELECT y.*
FROM (
    SELECT t.person, t.log_time, t.log_type, 
        ROW_NUMBER() OVER(PARTITION BY t.person ORDER BY t.log_time) - t.log_type AS group_num
    FROM dbo.MyTable AS t
) x
PIVOT( MAX(x.log_time) FOR x.log_type IN ([1], [2])) y
ORDER BY y.person, y.group_num

关于sql - 将 2 个日期行合并为 1 行中的 2 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42607983/

相关文章:

c# - 如何在 mysql 中使用触发器将列的值从特定日期更新到仅针对唯一客户 ID 的日期

sql - 具有多个外部应用行的大型表比较性能

sql-server - 加载使用 sgen 实用程序创建的 XMLSerializers 时,SQL Server "version, culture or public key mismatch"在 "create assembly"期间

sql - 在事务中创建 SQL Server 过程

sql-server - 如何查找单个存储过程中是否存在表名列表?

C# SMO 没有脚本约束

sql - 在 SQL 中创建反对称 key

sql-server - 在 T-SQL 中,为什么 Like 运算符不适用于变量但适用于文字?

database - 使用除 SQL Server 之外的排序规则冲突

MySQL:在同一个表上有内部查询引用外部列