SQL CUBE分组:无法修改汇总行Brand名称求助
解决方案
你需要调整CASE语句的逻辑,区分不同的分组汇总场景,特别是针对单个品牌的全局总计行,拼接对应的品牌名称。修改后的SQL代码如下:
SELECT Month(PurchaseDate) AS 'Month', CASE -- 单个品牌的全月份总计行 WHEN GROUPING(MONTH(PurchaseDate)) = 1 AND GROUPING(Brand) = 0 THEN 'Grand Total for ' + Brand -- 当月所有品牌的小计行 WHEN GROUPING(MONTH(PurchaseDate)) = 0 AND GROUPING(Brand) = 1 THEN 'Monthly SubTotal' -- 全局总计行 WHEN GROUPING(MONTH(PurchaseDate)) = 1 AND GROUPING(Brand) = 1 THEN 'Grand Total' -- 正常明细行 ELSE Brand END AS 'Brand', SUM(PRICE) AS 'Total Amount' FROM [Purchase_Items] GROUP BY MONTH(PurchaseDate), Brand WITH CUBE
逻辑说明:
GROUPING(MONTH(PurchaseDate)) = 1 AND GROUPING(Brand) = 0:表示该分组是某个品牌跨所有月份的总计,此时拼接品牌名称生成目标文本GROUPING(MONTH(PurchaseDate)) = 0 AND GROUPING(Brand) = 1:表示该分组是某个月份下所有品牌的小计,保留原有的“Monthly SubTotal”GROUPING(MONTH(PurchaseDate)) = 1 AND GROUPING(Brand) = 1:表示全局所有数据的总计,显示“Grand Total”- 最后用ELSE处理正常的明细行,直接显示品牌名称
这样调整后,就能得到你预期的汇总行文本格式。
内容的提问来源于stack exchange,提问作者Kelvin Fortin
相关产品推荐
相关产品推荐

