一个 Pivot 查询中的两个操作
Two operations in one Pivot query
我有来自 select 查询的数据如下:
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
我试图在一个查询中实现两件事,因为这将是一个动态的查询和其他事情。
一:获取活动作为列 headers 和
二:获取列 Col1、Col2 和 Col3 作为行值出现。在步骤 1 中创建的每个列 Headers 下,这些相应的值应该显示如下:
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, 'Release to Trace', '001-20-04', '19072M-001-04', 19104
union
select 421473, 'Trace Complete', '001-20-05', '19072M-001-05', 19105
union
select 421473, 'NDE Complete', '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], [Release to Trace], [Trace Complete])
) PVT
ORDER BY ScopeGroupID
,[column];
我有来自 select 查询的数据如下:
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
我试图在一个查询中实现两件事,因为这将是一个动态的查询和其他事情。
一:获取活动作为列 headers 和 二:获取列 Col1、Col2 和 Col3 作为行值出现。在步骤 1 中创建的每个列 Headers 下,这些相应的值应该显示如下:
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, 'Release to Trace', '001-20-04', '19072M-001-04', 19104 union select 421473, 'Trace Complete', '001-20-05', '19072M-001-05', 19105 union select 421473, 'NDE Complete', '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], [Release to Trace], [Trace Complete])
) PVT
ORDER BY ScopeGroupID
,[column];