如何解决一个数据透视查询中的两个操作
我从选择查询中获得的数据如下:
ScopeGroupID Activity Col1 Col2 Col3 421471 Release to Trace 001-20-01 19072M-001-01 19101 421471 Trace Complete 001-20-02 19072M-001-02 19102 421471 NDE Complete 001-20-03 19072M-001-03 19103 421473 Release to Trace 001-20-04 19072M-001-04 19104 421473 Trace Complete 001-20-05 19072M-001-05 19105 421473 NDE Complete 001-20-06 19072M-001-06 19106
我正在尝试在一个查询中实现两件事,因为这将与其他事情一起动态发展。
一个:将“活动”作为列标题和 第二个:获取列Col1,Col2和Col3作为行值。在步骤1中创建的每个列标题下,这些对应的值应显示如下:
ScopeGroupID Selected Params Release to Trace Trace Complete NDE Complete 421471 Col1 001-20-01 001-20-02 001-20-03 421471 Col2 19072M-001-01 19072M-001-02 19072M-001-03 421471 Col3 19101 19102 19103 421473 Col1 001-20-04 001-20-05 001-20-06 421473 Col2 19072M-001-04 19072M-001-05 19072M-001-06 421473 Col3 19104 19105 19106
活动是动态的,数量可以很多。
任何帮助将不胜感激。 这是要测试的SQL插入:
declare @datatemp table(ScopeGroupID int,Activity varchar(50),Col1 varchar(50),Col2 varchar(50),Col3 int) insert into @datatemp select 421471,'Release to Trace','001-20-01','19072M-001-01',19101 union select 421471,'Trace Complete','001-20-02','19072M-001-02',19102 union select 421471,'NDE Complete','001-20-03','19072M-001-03',19103 union select 421473,'001-20-04','19072M-001-04',19104 union select 421473,'001-20-05','19072M-001-05',19105 union select 421473,'001-20-06','19072M-001-06',19106
解决方法
您首先需要执行UNPIVOT
,然后执行PIVOT
:
SELECT ScopeGroupID,[column],[Release to Trace],[Trace Complete],[NDE Complete]
FROM
(
SELECT ScopeGroupID,Activity,Col1,Col2,CAST(Col3 AS VARCHAR(50)) AS Col3
FROM @datatemp
) DS
UNPIVOT
(
[value] FOR [column] IN ([Col1],[Col2],[Col3])
) UNPVT
PIVOT
(
MAX([value]) FOR [Activity] IN ([NDE Complete],[Trace Complete])
) PVT
ORDER BY ScopeGroupID,[column];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。