我已经制定了以下动态SQL查询,将未知数量的行值(Maschine Names为nvarchar)转换为列。透视列的行值应该是特定Maschine的停机时间和维护时间(两者都是int)的总和。
DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX);
SET @columns = N'';
SELECT @columns += N', p.' + QUOTENAME(Maschines)
FROM (SELECT Maschines FROM Rawdata AS p
GROUP BY MASCHINE) AS x;
SET @sql = N'
SELECT ' + STUFF(@columns, 1, 2, '') + '
FROM(
SELECT * from Rawdata
) AS j
PIVOT
(
SUM(maintenance) FOR Maschines IN ('
+ STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, '')
+')
) AS p;';
EXEC sp_executesql @sql;
查询返回总结的维护时间,但是一旦我尝试在总和中包含多个列(如Sum(维护+停机时间)),我会收到接近'+'的错误。
此外,查询返回一个透视表,但仍然具有相同的行数,但是我需要一个为未知列数分组的结果,因此只包含一行
答案 0 :(得分:0)
很遗憾,SQL中的PIVOT相当有限,因为你只能执行单个列的单个聚合。
您最好的选择不是仅仅做
Select * from rawdata
作为您的来源,包括一个预先添加维护和停机时间的列,例如
select *, maintenance + downtime as TotalTime from rawdata
然后聚合它。