2013-12-12 40 views
1

我想用ROLLUP函數運行查詢。SQL Server查詢GROUPING與ROLLUP

假設我的查詢是:

SELECT GEN.orgId,GEN.locId,GEN.rvcId 
GEN.rvcName,GEN.menuItemID,GEN.menuItemName , SUM(salesTotal) as 
salesTotal FROM GEN GROUP BY GEN.orgId,GEN.locId, 
GEN.rvcName,GEN.menuItemID,GEN.menuItemName ORDER BY GEN.menuItemName 

什麼這個查詢的輸出是:

orgId locId rvcName   menuItemID menuItemName  salesTotal 
10200 10002 Sydney Retail 10870   Cho Milk Shake  7.500000 
10200 10002 Sydney Wholesale 10870   Cho Milk Shake  7.500000 
10200 10002 Sydney Retail 10850   Berry Milk Shake  10.920000 
10200 10002 Sydney Wholesale 10850   Berry Milk Shake  10.920000 
10200 10002 Sydney Retail 10898   Apple Custard   5.460000 
10200 10002 Sydney Wholesale 10898   Apple Custard   5.460000 

當我申請的分組和ROLLUP到我的查詢:

SELECT GEN.orgId,GEN.locId, GEN.menuItemID, GEN.menuItemName, 
CASE WHEN GROUPING(GEN.rvcName) = 1 
    THEN 'Grand Total' 
    ELSE GEN.rvcName END as rvcName 
,SUM(salesTotal) as salesTotal 
GROUP BY GEN.orgId,GEN.locId, GEN.rvcId, GEN.rvcName, GEN.menuItemID, GEN.menuItemName WITH ROLLUP 
ORDER BY GEN.menuItemID asc 

這個查詢輸出(僅用於漿果奶昔):

orgId locId menuItemID menuItemName rvcName   salesTotal 
10200 10002 NULL   NULL    Sydney Retail  10.920000 
10200 10002 NULL   NULL    Grand Total  10.920000 
10200 10002 NULL   NULL    Sydney Wholesale 10.920000 
10200 10002 NULL   NULL    Grand Total  10.920000 
10200 10002 NULL   NULL    Grand Total  21.840000 
10200 NULL NULL   NULL    Grand Total  21.840000 
NULL NULL NULL   NULL    Grand Total  21.840000 
10200 10002 10850   Berry Milk Shake Sydney Wholesale 10.920000 
10200 10002 10850   NULL    Sydney Wholesale 10.920000 
10200 10002 10850   Berry Milk Shake Sydney Retail  10.920000 
10200 10002 10850   NULL    Sydney Retail  10.920000 

我的問題是:我有這個查詢造成了太多不必要的數據。我如何改進查詢並生成如下所示的內容。提前致謝。

我想實現的是:

orgId locId rvcName   menuItemID menuItemName   salesTotal 
10200 10002 Sydney Retail  10870   Cho Milk Shake  7.500000 
10200 10002 Sydney Wholesale 10870   Cho Milk Shake  7.500000 
10200 10002 ALL    10870   Cho Milk Shake  15.000000 
10200 10002 Sydney Retail  10850   Berry Milk Shake  10.920000 
10200 10002 Sydney Wholesale 10850   Berry Milk Shake  10.920000 
10200 10002 ALL    10850   Berry Milk Shake  21.840000 
10200 10002 Sydney Retail  10898   Apple Custard   5.460000 
10200 10002 Sydney Wholesale 10898   Apple Custard   5.460000 
10200 10002 ALL    10898   Apple Custard  10.920000 

回答

0
再次

感謝這個問題.. 有一兩件事我想在這裏補充,我們不能得到的結果相同你期待在這裏。 這背後的原因是,rvcName列數據不會以您想要的相同方式來。 當我們按功能分組時,我們查詢中包含的所有列數據被分組在一起。

所以,所有的悉尼零售,悉尼批發將ge組合在一起。只要你想,這肯定會得到結果。 如果您在預期的答案中看到,您已將除rvcName之外的所有列的數據分組。

所以,這裏是你的查詢,我希望這可以引導你...

選擇ORGID,LOCID,rvcname,menuitemname,menuitemid,總和(salesTotal)爲 '銷售總額' 從根 組由ORGID,LOCID,rvcName,menuItemName,menuitemid與彙總

,這會給你造成這樣

ORGID LOCID rvcname menuitemname menuitemid銷售總額
1 2悉尼蘋果零售店吉士30 5.46
1 2西尼零售蘋果蛋奶NULL 5.46
1 2西尼零售漿果搖20 10.92
1 2西尼零售漿果搖NULL 10.92
1 2西尼零售奶昔10 7.5
1 2西尼零售奶昔NULL 7.5
1 2 sydney retail NULL NULL 23.88
1 2 syndney批發蘋果餡餅30 5.46
1 2 syndney批發蘋果餡餅NULL 5。46
1 2 syndney批發漿果搖20 10.92
1 2 syndney批發漿果搖NULL 10.92
1 2 syndney批發奶昔10 7.5
1 2 syndney批發奶昔NULL 7.5
1 2 syndney批發NULL NULL 23.88
1 2 NULL NULL NULL 47.76
1 NULL NULL NULL NULL 47.76
NULL NULL NULL NULL NULL 47.76

希望你有問題區域...唯一的一點是,W如果我們使用任何組函數/聚合函數,所有類似的數據將被分組在一起。

如果結果文本看起來凌亂,嘗試粘貼在Excel中..我dnt knw爲什麼雖然我從sql server的結果複製到excel,它似乎凌亂..如果不方便,道歉。

如果您還有疑問,請隨時通知我。 (印度孟買)