【问题标题】:Sum Colum case () after pivot枢轴后的 Sum Column case ()
【发布时间】:2015-05-06 20:52:36
【问题描述】:

对不起,如果我没有很好地解释,而且标题也不是很清楚。 我正在使用 SQL Server 2005。 我有一个使用 Pivot 的查询,它工作正常,但我知道我必须添加一个新查询,以便从季度获取结果。

这是我从 Month 获取结果的查询

    WITH PivotData AS
(
SELECT  idWatimetro, mes,ano, valor
FROM   E_Registros_Watimetros where ano = 2012
)
SELECT *
FROM PivotData 
PIVOT(SUM(valor) FOR idWatimetro IN ([1],[2],[3],[4],[5] AS P order by mes;

所以,只知道我想获得四个注册

1 With Month 1+2+3
2 Wint Month 4+5+6
3 With Month 7+8+9
4 Wint Month 10+11+12

我一直在尝试使用 UNION ALL,但没有按预期工作,任何帮助将不胜感激,对于我糟糕的英语和解释感到抱歉。

这是我没有结果的查询

SELECT  * 
FROM    (
            SELECT  idWatimetro, ano,mes, valor
            FROM E_Registros_Watimetros   
            WHERE (ano = 2012 and mes = 1 ) or (ano = 2012 and mes = 2)or (ano = 2012 and mes = 3)
            UNION ALL
            SELECT  idWatimetro, ano,mes, valor
            FROM E_Registros_Watimetros    
            WHERE (ano = 2012 and mes = 4 ) or (ano = 2012 and mes = 5)or (ano = 2012 and mes = 6)
        ) AS SourceTable
PIVOT(SUM(valor) FOR idWatimetro IN ([1],[2],[3],[4],[5]))AS P

多谢了。

【问题讨论】:

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


    【解决方案1】:

    尝试类似.....

       ; WITH PivotData AS
    (
    SELECT  idWatimetro
          ,CASE WHEN mes IN (1,2,3)    THEN 1
                WHEN mes IN (4,5,6)    THEN 2
                WHEN mes IN (7,8,9)    THEN 3
                WHEN mes IN (10,11,12) THEN 4
           END AS mes
          ,ano
          ,valor
    FROM   E_Registros_Watimetros where ano = 2012
    )
    SELECT *
    FROM PivotData 
    PIVOT(SUM(valor) 
          FOR Mes 
          IN ([1],[2],[3],[4]))p
    

    【讨论】:

      【解决方案2】:

      你可以在PIVOT的结果集上GROUP BY季号,即mes - (mes - 1) % 3

      WITH PivotData AS
      (
         SELECT  idWatimetro, mes,ano, valor
         FROM   E_Registros_Watimetros where ano = 2012
      ),
      PivotResult AS 
      (
         SELECT *
         FROM PivotData 
         PIVOT(SUM(valor) FOR idWatimetro IN ([1],[2],[3],[4],[5])) AS P 
      ),
      SELECT CASE mes - (mes - 1) % 3 
               WHEN 1 THEN '1st' 
               WHEN 4 THEN '2nd' 
               WHEN 7 THEN '3rd' 
               ELSE '4th' 
             END AS quarter,
             2012 AS ano, sum([1]) AS [1], sum([2]) AS [2], 
             sum([3]) AS [3], sum([4]) AS [4], sum([5]) AS [5]
      FROM PivotResult
      GROUP BY mes - (mes - 1) % 3  
      

      【讨论】:

        猜你喜欢
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多