PIVOT之后的SUM(值)组

时间:2014-12-28 17:45:59

标签: sql-server sql-server-2005 pivot

我对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

但是现在,我必须能够每个月或几天或几周或一年获得Sum(勇气),但是我没有成功,任何帮助都会很好

感谢您的时间。

在提出Pieter Geerkens之后,我想做的就是这样 每个月的Sum(1),Sum(2),Sum(3)... Sum(10)。 月份是一个例子,因为这个参数可以是年,日或周 很抱歉不太清楚,我的英语不是很好。

enter image description here

2 个答案:

答案 0 :(得分: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框。

答案 1 :(得分: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