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

问题描述 投票:-1回答:2

我有一些项目在不同的日期/时间定期发布(I-UN)和浪费(W-WS)。我每次都会保留一个交易时间(W-WS减去I-UN),所以为了完成它,我需要在单独的列中使用I-UN Date和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

有没有办法可以查询以获得我想要的结果?对你的帮助表示感谢。谢谢!

sql sql-server pivot
2个回答
0
投票

表格自行连接,左边是I-UN行,右边是TOP 1 W-WS行,左边是Date,左边是Date

作为自连接的替代,您可以在FROM..WHERE子句中选择I-UN行,并使用子查询获取W-WS Date


0
投票

您可以尝试对项目ID和按时间排序的row_number()进行完全连接。

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#;

db<>fiddle

或者可能是内连接,如果你只想要两个时间都存在的对(或者如果你只想确保所有时间都用于其中一个,则为左连接或右连接)。

© www.soinside.com 2019 - 2024. All rights reserved.