我正在尝试使用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
当我将GROUPING和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
此查询输出(仅适用于Berry Milk Shake):
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 :(得分:0)
再次感谢您提出这个问题.. 我想在此添加的一件事是,我们无法获得与您期望的相同的结果。 这背后的原因是,rvcName列数据不会以你想要的相同方式出现。 当我们按功能使用group时,我们在查询中包含的所有列数据都被组合在一起。
因此,所有悉尼零售,悉尼批发都将组合在一起。这肯定会得到你想要的结果。 如果您在预期答案中看到,则您对除rvcName之外的所有列的数据进行了分组。
所以,这是您的查询,我希望这可以指导您......
选择orgid,locid,rvcname,menuitemname,menuitemid,sum(salesTotal)作为'总销售额' 来自gen group by orgid,locid,rvcName,menuItemName,menuitemid with rollup
这会给你这样的结果
orgid locid rvcname menuitemname menuitemid总销售
1 2悉尼零售苹果蛋羹30 5.46
1 2悉尼零售苹果蛋羹NULL 5.46
1 2悉尼零售浆果摇20 10.92
1 2悉尼零售浆果摇动空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 wholesale berry shake NULL 10.92
1 2 syndney批发奶昔10 7.5
1 2 syndney批发奶昔NULL 7.5
1 2 syndney wholesale 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
希望你得到问题区域...唯一的事情是,当我们使用任何组函数/聚合函数时,所有类似的数据都被组合在一起。
如果结果文本看起来很乱,请尝试粘贴到excel中。我知道为什么虽然我将结果从sql server复制到excel,但它看起来很麻烦..如果不方便,请道歉。
如果您仍有疑问,请随时告诉我。
亲切的问候, Ashay(孟买/印度)