如何 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.
我有一个 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.