如何选择SQL Server行值作为列(Dynamic Pivot)

时间:2015-04-30 08:19:32

标签: sql sql-server pivot pivot-table

我有一张表,我们正在收集来自不同传感器的状态数据。出于报告目的,我需要将每个传感器(SGUID)的信息分组到一行。每个传感器都是发送阅读器(RGUID)和读取器值(VAL)。

来源表: Source table

目标结果: Goal result

我听说过枢轴,但不知道如何在这种情况下使用它们。

1 个答案:

答案 0 :(得分:2)

您需要使用动态T-SQL进行动态调整:

appDelegate.jsonData = outPut;

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) 将显示构造的查询。从那里你可以很简单地调试任何问题。这个想法很简单,我创造​​了一个工作小提琴here