2014-12-28 115 views
2

我對Pivot有以下查詢,效果很好。SUM(Value)Group By After PIVOT

WITH PivotData AS 
( 
SELECT fechaHora, idWatimetro, semana, hora, minuto,dia,mes ,ano,valor 
FROM E_Registros_Watimetros 
) 
SELECT * 
FROM PivotData 
PIVOT(SUM(valor) FOR idWatimetro IN (
    [1],[2],[3],[4],[5],[6],[7],[8],[9],[10] 
    )) AS P 
order by fechaHora, semana,dia,mes; 

enter image description here

但現在,我必須能夠得到總和(勇氣),每一個月或數天或數週或一年,但我正嘗試沒有成功,任何幫助將是很好

謝謝你的時間。

經過Pieter Geerkens的建議,我想要做的就是這樣 每個月的總和(1),總和(2),總和(3)...總和(10)。 本月是一個例子,因爲這個參數可以是,年,日或星期 對不起,不太清楚,我的英文不太好。

enter image description here

+0

你期望的輸出看起來像什麼?如果沒有這個,每個幫助的嘗試都會隨機猜測你在找什麼。此外,您不清楚您的需求實際上可以由單個查詢創建,因爲它似乎是分層結果集。 –

回答

1

您可以使用您的查詢來做到這一點,但您需要通過刪除最終結果中不需要的列來更改數據透視源查詢。嘗試這個。

WITH PivotData 
    AS (SELECT idWatimetro, 
       mes, 
       ano, 
       valor 
     FROM E_Registros_Watimetros) 
SELECT * 
FROM PivotData 
     PIVOT(Sum(valor) 
      FOR idWatimetro IN ([1], 
           [2], 
           [3], 
           [4], 
           [5], 
           [6], 
           [7], 
           [8], 
           [9], 
           [10])) AS P 
+0

這工作完美! – yaqui

+0

@yaqui - 很高興它幫助你 –

1

您可以添加第二個CTE做支點,並使用最終SELECTGROUP BY

WITH PivotData AS 
( 
SELECT fechaHora, idWatimetro, semana, hora, minuto,dia,mes ,ano,valor 
FROM E_Registros_Watimetros where ano = 2012 
), tempData AS (
SELECT * 
FROM PivotData 
PIVOT(SUM(valor) FOR idWatimetro IN ([1],[2],[3],[4],[5])) AS P 
) 

SELECT MONTH(fechaHora) AS [Month], 
     SUM([1]) AS KW1, 
     SUM([2]) AS KW2, 
     SUM([3]) AS KW3 
FROM tempData 
GROUP BY MONTH(fechaHora)  

編輯:上面的查詢工作在我的SQL Server 2008框。

+0

我嘗試了但不爲我工作,因爲每個列都顯示以下錯誤「消息207,級別16,狀態1,行14無效的列名稱'1'...'10' – yaqui

+0

您可以將列名在'tempData' CTE:'SELECT [1] AS KW1,[2] AS KW2,...' –

+0

請看看,我沒有看到任何錯誤,但沒有工作,我已經像上面那樣嘗試過了代碼 – yaqui