一个 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];