【问题标题】:How to select SQL Server row values as columns (Dynamic Pivot)如何选择 SQL Server 行值作为列(动态数据透视)
【发布时间】:2015-04-30 08:19:31
【问题描述】:

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

源表:

目标结果:

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

【问题讨论】:

  • 你知道开发时的 rguid 吗?意味着:您是否能够将它们硬编码到查询中,还是需要动态检索值?
  • 这很可能是动态的,需要Dynamic Pivot。可能重复:stackoverflow.com/questions/10404348/…

标签: sql sql-server pivot pivot-table


【解决方案1】:

您需要使用一些动态 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 将向您显示构造的查询。从那里您可以非常简单地调试任何问题。这个想法很简单,我创建了一个工作小提琴here

【讨论】:

    猜你喜欢
    • 2012-10-10
    • 1970-01-01
    • 2014-10-16
    • 2014-07-26
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2022-12-09
    • 2013-02-09
    相关资源
    最近更新 更多