在SQL Pivot中进行分组

时间:2014-11-26 16:56:15

标签: sql-server group-by pivot rollup

我已经设法在MS SQL中创建了一个数据透视表,我想用GrpID对年度列进行分组。我同样理解有一个应该遵守的汇总条款,但不能理解它。

SELECT * 

FROM(

    SELECT Descr, NameID, grpid,YE,total from appendicesgrouping
) as t

PIVOT (sum(total) 
       for ye in (
                  [2010],[2011],[2012],[2013],[2014]
                  )
       ) as PVT 

WHERE grpid < 7 
    AND practiceiD = 2 

ORDER BY nameid asc, grpid asc, descr asc

这给出了以下回报:

Descr|NameID|GrpID|2010|2011|2012|2013|2014|

Sale1|1     |1    |1000|1100|900 |1050|1125|

Sale2|1     |1    |500 |600 |650 |550 |525 |

Sale3|1     |1    |45  |50  |50  |45  |45  | 

Cost1|1     |2    |10  |10  |10  |10  |10  | 

Cost2|1     |2    |5   |5   |5   |5   |5   | 

Cost10|1     |3    |10  |10  |10  |10  |10  | 

Cost11|1     |3    |5   |5   |5   |5   |5   |

理想情况下,我在每个栏目中的“Sale3”之后所追求的是1545 | 1750 | 1645 | 1695,等等GrpID每次更改。

1 个答案:

答案 0 :(得分:0)

试试这个。在SUM aggregate

之后选择并添加GROUP BY grpid,NameID,Descr WITH rollup,然后使用Where Clause
SELECT Descr,
       NameID,
       grpid,
       Sum([2010])[2010],
       Sum([2011])[2011],
       Sum([2012])[2012],
       Sum([2013])[2013],
       Sum([2014])[2014]
FROM  (SELECT Descr,
              NameID,
              grpid,
              YE,
              total
       FROM   appendicesgrouping) AS t
      PIVOT (Sum(total)
            FOR ye IN ([2010],[2011],[2012],[2013],[2014])) AS PVT
WHERE  grpid < 7
       AND practiceiD = 2
GROUP  BY grpid,
          NameID,
          Descr WITH rollup
ORDER  BY nameid ASC,
          grpid ASC,
          descr ASC