Sql 将多行转换为具有特定列名的列
我有一些项目在不同的日期/时间定期发布(I-UN)和浪费(W-WS)。我将为每次保留一个事务时间(W-WS减去I-UN),因此为了完成它,我需要在单独的列中输入I-UN日期和W-WS 以下是我所拥有的: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
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
行,右侧为顶部1W-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匹配,因为这不是一个轴,这是一个简单的自连接。