2013-10-23 67 views
0

我制定了以下动态SQL查询以将未知数量的行值(Maschine Names作为nvarchar)转换为列。 Pivoted Columns的行值应该是特定Maschine的停机时间和维护时间(包括int)的总和。动态SQL中的分组和聚合函数透视查询

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; 

查询returnes求和的维护时间,但一旦我尝试包括总和(如求和(维修+停机时间))超过一个专栏中,我亲近“+”的错误。

此外,该查询返回一个枢轴表,但仍具有相同的行数,不过,我需要的是为列的未知数量的分组结果,从而只包含一个行

回答

0

因此,不幸的PIVOT在SQL中相当有限,因为您只能执行单个列的单个聚合。

你最好的选择是不是只是在做

Select * from rawdata 

为源,包括列前增加了维护和停机时间在一起,就像

select *, maintenance + downtime as TotalTime from rawdata 

,然后聚集它。