遍历 temp table 并在另一个查询的 select 语句中使用列值作为列名

Loop through temp table and use column values as column names in a select statement in another query

我正在创建一个临时文件 table 并希望遍历该临时文件 table 中的行,然后在另一个查询的 select 语句中使用这些值作为列名。

温度 Table

Reviewer    |  Status
---------------------------
Reviewer1   |  Under Review
Reviewer2   |  Approved
Reviewer3   |  Denied
Reviewer4   |  Under Review

想要的结果

Reviewer1     |  Reviewer2     |  Reviewer3     |  Reviewer4
------------------------------------------------------------
Under Review  |  Approved      |  Denied        |  Under Review

我遵循了这个例子:Setting column values as column names in the SQL query result 并且可以让它在临时 table 中与预定义数量的 rows/values 一起工作,但我将有一个未定义数量的审阅者,我无法获得动态 select 版本工作,因为 SQL 没有 Group_Contact 功能。

我已经坚持了一段时间,非常感谢任何建议。

也许这个脚本会有所帮助。正如我上面提到的,它使用 PIVOT 和动态 SQL.

CREATE TABLE Review (Reviewer VARCHAR(100), Status VARCHAR(100))
INSERT INTO Review
VALUES ('Reviewer1','Under Review'),
       ('Reviewer2','Approved'),
       ('Reviewer3','Denied'),
       ('Reviewer4','Under Review'),
       ('Reviewer5','Denied'),
       ('Reviewer6','Under Review');

DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX);
SET @columns = N'';
SELECT @columns += N', p.' + QUOTENAME(Name)
  FROM (SELECT p.Reviewer AS Name
        FROM Review AS p
        GROUP BY p.Reviewer) AS x;
SET @sql = N'
SELECT ' + STUFF(@columns, 1, 2, '') + '
FROM
(
  SELECT p.Reviewer AS Name, p.Status
   FROM Review AS p
) AS j
PIVOT
(
  MAX(Status) FOR Name IN ('
  + STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, '')
  + ')
) AS p;';
PRINT @sql;
EXEC sp_executesql @sql;