问题描述
b()
enter image description here 1.) 如何只保留最后一行的“Grand Total”并删除“DivTotal”、“SecTotal”、“DeptTotal”。
2.) 有没有更好的选择来使用“WITH ROLLUP”,以便我只选择需要小计的列,而不是对 GROUP BY 子句中的所有列进行小计?
注意:我已经在使用多个 UNION,所以如果可能,请给出没有联合的解决方案。 无法嵌入图片,给您带来不便敬请谅解。
解决方法
我认为 CTE 和摘要可能是一种更简单的方法:
with cte as (
select m.Division,m.Section,m.Department,m.Assortment,m.Promo,m.Range_Details,. . .
from . . .
group by m.Division,m.Range_Details
)
select *
from cte
union all
select 'Grand Total',null,sum(WH_STK),. . .
from cte;
,
我以这种方式解决了这个问题,灵感来自于 stackoverflow 本身的答案:
COALESCE(Division,'Grand Total') Divi,(CASE WHEN Division IS NOT NULL THEN COALESCE(Section,'DivTotal') ELSE '' END) Sec,(CASE WHEN Section IS NOT NULL THEN COALESCE(m.Department,'SecTotal') ELSE '' END) Dept,(CASE WHEN m.Department IS NOT NULL THEN COALESCE(Assortment,' Total') ELSE '' END) Assort,COALESCE(Promo,'') Prom,(CASE WHEN Division IS NULL THEN COALESCE(Range_Details,'Grand Total') ELSE COALESCE(Range_Details,'') END) Range_
感谢大家抽出时间。