如何 select SQL 服务器行值作为列(动态数据透视)

How to select SQL Server row values as columns (Dynamic Pivot)

我有一个 table,我们从不同的传感器收集状态数据。出于报告目的,我需要将每个传感器 (SGUID) 的信息分组到一行。每个传感器正在发送 reader (RGUID) 和 reader (VAL) 的值。

来源table:

目标结果:

我听说过数据透视表,但不知道如何在这种情况下使用它们。

您需要使用一些动态 T-SQL:

的动态枢轴
CREATE TABLE #VALS (
    VALS NVARCHAR(4000)
)

INSERT INTO #VALS
SELECT DISTINCT RGUID
FROM [TABLE]

DECLARE @SQL NVARCHAR(MAX)
DECLARE @VALS NVARCHAR(4000)

SELECT @VALS = COALESCE(@VALS+', ','') + '[' + VALS + ']' FROM #VALS

SET @SQL = '
SELECT SGUID, '+@VALS+'
FROM [TABLE]
PIVOT(MAX(VAL) FOR RGUID IN ('+@VALS+')) PIV'
PRINT @SQL
EXEC (@SQL)

PRINT 将向您显示构造的查询。从那里您可以非常简单地调试任何问题。这个想法很简单,我创建了一个工作 fiddle here.