本文介紹的方法是爲配合cube一起使用
cube的使用方法
如果我們想統計各種顏色的買了多少,並且最後合計一共買了多少,用比較笨的方法可以這樣實現:
Select Color,SUM(Quantity) AS Quantity from #T GROUP BY Color
UNION
SELECT '合計',SUM(Quantity) FROM #T
結果:
我們可以看到順序還有問題,還得要調整,這時候我們可以使用CUBE:
SELECT
Color,
SUM(Quantity) AS Quantity
FROM
#T
GROUP BY
Color WITH CUBE;
結果:
我們看到這樣就解決了上面的問題,對顏色進行了統計,同時在最後生成了合計數據,但是這裏還有一個問題,就是合計那裏顯示的NULL,這個我們可以用GROUPING函數來解決(GROUPING後續我們會再介紹):
SELECT
CASE
WHEN GROUPING(Color) = 1
THEN '合計'
ELSE
Color
END Color,
SUM(Quantity) AS Quantity
FROM
#T
GROUP BY
Color WITH CUBE;
結果:
grouping的使用方法
grouping函數用來區分NULL值,這裏NULL值有2種情況,一是原本表中的數據就爲NULL,二是由rollup、cube、grouping sets生成的NULL值。
當爲第一種情況中的空值時,grouping(NULL)返回0;當爲第二種情況中的空值時,grouping(NULL)返回1。實例如下,從結果中可以看到第二個結果集中原本爲null的數據由於grouping函數爲1,故顯示ROLLUP-NULL字符串。