sql-server - 使用 PIVOT 在 SQL Server 中将列转换为行
问题描述
我知道,这个问题并不新鲜,我在这里阅读了很多示例,但找不到我的任务的解决方案:
我主要有两个表,按 1:n 关联。这TestPlan_Measure_Modules_Sensors
是表中传感器通道和通道本身的集合Machine_TestResults_Values
。
每个频道的数量都不同TestPlan_Measure_Modules_Sensors
。
以下是定义:
id_TestPlan_Measure_Module_Sensors
链接到传感器定义。
假设“Drehzahl”传感器有两个值,查询结果如下表:
SELECT
TestPlan_Measure_Module_Sensors.SensorName, LineNumber, Value
FROM
Machine_TestResults_Sensors
LEFT JOIN
Machine_TestResults_Values ON Machine_TestResults_Sensors.id = Machine_TestResults_Values.id_Machine_TestResults_Sensors
LEFT JOIN
TestPlan_Measure_Module_Sensors ON Machine_TestResults_Sensors.id_TestPlan_Measure_Module_Sensors = TestPlan_Measure_Module_Sensors.id
WHERE
id_Machine_Measure_Modules = 253
现在我需要切换行和列以获得这样的输出:
我假设我需要动态 SQL 来实现基于可变列数和适当的 Pivot 语句的结果。但是 SQL Server 中的 Pivot 并不是我真正的强项,所以我希望这里有人能帮助我。
更新:谢谢提示,我尝试了SQL Server 动态 PIVOT 查询的解决方案?
我的示例,调整为上述链接中的解决方案,结果如下表:
知道如何摆脱第一个“NULL”行吗?
更新:我DELETE
在查询中添加了一条语句,现在看起来应该这样。
这是我的查询版本:
DECLARE @cols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);
SELECT
TestPlan_Measure_Module_Sensors.SensorName, LineNumber, Value
FROM
Machine_TestResults_Sensors
LEFT JOIN
Machine_TestResults_Values ON Machine_TestResults_Sensors.id = Machine_TestResults_Values.id_Machine_TestResults_Sensors
LEFT JOIN
TestPlan_Measure_Module_Sensors ON Machine_TestResults_Sensors.id_TestPlan_Measure_Module_Sensors = TestPlan_Measure_Module_Sensors.id
WHERE
id_Machine_Measure_Modules = 253
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.SensorName)
FROM #temp c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @query = 'SELECT LineNumber, ' + @cols + ' INTO #pt from
(
select LineNumber,
[Value],
SensorName
from #temp
) x
pivot
(
max([Value])
for SensorName in (' + @cols + ')
) p; DELETE FROM #pt WHERE LineNumber IS NULL; SELECT * FROM #pt;'
Execute(@query);
DROP TABLE #temp
解决方案
推荐阅读
- python - Python: Extract field values into new columns, write to Excel
- java - 试图理解存储 stringAt()
- javascript - CORS 问题 - Angular 8 - NodeJS 和 ExpressJS
- c - C: printf 不立即输出
- python - 使用 statsmodels 计算 Gamma GLM 的尺度/分散
- arrays - 遍历数组,在单元格中查找子字符串,替换 Google 表格中的文本
- powershell - 如何使用 powershell 变量设置 Excel 工作表名称?
- docker - 无法通过 ssh 进入 docker 容器
- python - 使用 Pandas 数据框将具有非不同值(来自 csv)的列转换为具有唯一/不同值(保存在新 csv 中)的列?
- c - 如何在 Cython 中包装 C 内循环