Sql 将多行转换为具有特定列名的列

Sql 将多行转换为具有特定列名的列,sql,sql-server,pivot,Sql,Sql Server,Pivot,我有一些项目在不同的日期/时间定期发布(I-UN)和浪费(W-WS)。我将为每次保留一个事务时间(W-WS减去I-UN),因此为了完成它,我需要在单独的列中输入I-UN日期和W-WS 以下是我所拥有的: ItemID Type Date 441455 I-UN 3/24/19 8:00 441455 W-WS 3/24/19 8:09 441455 I-UN 3/24/19 9:47 441455 W-WS 3/24

我有一些项目在不同的日期/时间定期发布(I-UN)和浪费(W-WS)。我将为每次保留一个事务时间(W-WS减去I-UN),因此为了完成它,我需要在单独的列中输入I-UN日期和W-WS

以下是我所拥有的:

    ItemID  Type    Date
    441455  I-UN    3/24/19 8:00
    441455  W-WS    3/24/19 8:09
    441455  I-UN    3/24/19 9:47
    441455  W-WS    3/24/19 9:51
    441455  I-UN    3/24/19 12:20
    441455  W-WS    3/24/19 12:26
    441455  I-UN    3/24/19 15:50
    441455  W-WS    3/24/19 15:53
以下是我努力实现的目标:

    ItemID  I-UN Date       W-WS Date
    441455  3/24/19 8:00    3/24/19 8:09
    441455  3/24/19 9:47    3/24/19 9:51
    441455  3/24/19 12:20   3/24/19 12:26
    441455  3/24/19 15:50   3/24/19 15:53

是否有一种方法可以查询以获得所需的结果?非常感谢你的帮助。谢谢大家!

将表与自身进行自联接,左侧为
I-UN
行,右侧为顶部1
W-WS
行,右侧为
Date
,左侧为
Date


作为自联接的替代方法,您可以只选择FROM..WHERE子句中的
I-UN
行,并通过子查询获取
W-WS-Date

您可以尝试按时间顺序对项目ID和
行编号()进行完全联接

SELECT t1.itemid [ItemID],
       t1.date [I-UN Date],
       t2.date [W-WS Date]
       FROM (SELECT itemid,
                    date,
                    row_number() OVER (ORDER BY date) r#
                    FROM elbat
                    WHERE type = 'I-UN') t1
            FULL JOIN (SELECT itemid,
                              date,
                              row_number() OVER (ORDER BY date) r#
                              FROM elbat
                              WHERE type = 'W-WS') t2
                      ON t1.itemid = t2.itemid
                         AND t1.r# = t2.r#;


或者,如果您只想在两个时间都存在的情况下使用一个内部联接(或者如果您只想确保其中一个时间都被占用,则可以使用左联接或右联接)。

除非您能告诉我们对齐两个值的业务规则,否则无法实现这一点。有多个W-W可以与给定的I-W匹配,因为这不是一个轴,这是一个简单的自连接。