2013-10-23 94 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 

,然後聚集它。