Sql 上卷以仅保留总计并删除小计

Sql 上卷以仅保留总计并删除小计,sql,mariadb,mariadb-10.5,Sql,Mariadb,Mariadb 10.5,对于以下查询输出,我有两个问题: COALESCE(Division,'Grand Total') Divi, COALESCE(Section,'DivTotal') Sec, COALESCE(m.Department,'SecTotal') Dept, COALESCE(Assortment,'DeptTotal') Assort, COALESCE(Promo,'') Prom, COALESCE(Range_Details,'') Ra

对于以下查询输出,我有两个问题:


    COALESCE(Division,'Grand Total') Divi,
    COALESCE(Section,'DivTotal') Sec,
    COALESCE(m.Department,'SecTotal') Dept,
    COALESCE(Assortment,'DeptTotal') Assort,
    COALESCE(Promo,'') Prom,
    COALESCE(Range_Details,'') Range_,
    SUM(`WH STK`) WH_STK,
    SUM(`AL STK QTY`) AL_STK,
    SUM(`AL SAL QTY`) AL_SAL,
    SUM(`AL LYa`) LY_a,
    SUM(`AL LYb`) LY_b,
    SUM(`AL MIN`) AL_MIN,
    b.LYa_tot,
    b.LYb_tot,
    COALESCE(ROUND(((SELECT b.LYb_tot)/(SELECT b.LYa_tot))* COALESCE(SUM(`AL SAL QTY`),0),0),0) 'upcoming',
    COALESCE((ROUND(((SELECT b.LYb_tot)/(SELECT b.LYa_tot))*SUM(`AL SAL QTY`),0) +  SUM(`AL MIN`)) - SUM(`AL STK QTY`),0) 'Dispatch'

FROM
(.....I have removed rest of the query part to make it short....) m
GROUP BY
    m.Division,
    m.Section,
    m.Department,
    m.Assortment,
    m.Promo,
    m.Range_Details WITH ROLLUP HAVING
(Division IS NOT NULL AND Section IS NOT NULL AND Department IS NULL AND Assortment IS NULL AND Promo IS NULL AND Range_Details IS NULL )
OR (Division IS NOT NULL AND Section IS NOT NULL and Section NOT IN  ('OTHERS','W_ACCESSORIES','W_BOTTOMWEAR','W_INNERWEAR','W_UPPERWEAR') AND Department IS NOT NULL AND Assortment IS NULL AND Promo IS NULL AND Range_Details IS NULL )
OR (Division IS NOT NULL AND Section NOT IN  ('OTHERS','W_ACCESSORIES','W_BOTTOMWEAR','W_INNERWEAR','W_UPPERWEAR') AND Department IS NOT NULL and Department NOT IN ('GLOVE','RAINCOAT','SWIM SUIT','CORD TROUSERS','COTTON TROUSERS','FORMAL TROUSERS') AND Assortment IS NOT NULL AND Promo IS not NULL AND Range_Details IS not NULL )
OR (Division IS NULL AND Section IS NULL AND Department IS NULL AND Assortment IS NULL AND Promo IS NULL AND Range_Details IS NULL )
1.)如何在最后一行仅保留“总计”并删除“DivTotal”、“SecTotal”、“deptottal”

2.)是否有更好的选项使用“WITH ROLLUP”,以便我只选择需要小计的列,而不是对GROUP BY子句中的所有列进行小计

注意:我已经在使用多个并集,所以如果可能,请给出没有并集的解决方案。
无法嵌入图像,对此不便表示歉意。

我认为CTE和摘要可能是一种更简单的方法:

with cte as (
      select m.Division, m.Section, m.Department, m.Assortment,  m.Promo, m.Range_Details,
             . . . 
      from . . .
      group by m.Division, m.Section, m.Department, m.Assortment,  m.Promo, m.Range_Details
     )
select *
from cte
union all
select 'Grand Total', null, null, null, null, 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_

感谢大家抽出时间。

是的,
汇总
可能会在这里为您工作。请将示例数据添加到您的问题中,以使问题更清楚(仅查询对我们没有多大帮助)。只需添加
和Sec!='DivTotal'和Dept!='部门和分类!='deptottal')
添加到您的
HAVING
子句中?@Nick抱歉,这将删除总计行。我需要一个包含部分、部门和产品组合的总计行作为blankAh抱歉,是的,您需要将其设置为
和(Divi=='grand total'或Sec!='DivTotal'和Dept!='SecTotal'和产品组合!='deptottal'
)`也不是这样工作的。我现在已经解决了,solutino发布在下面。我现在已经解决了,但如果它更有意义,我会稍后尝试这种方法。谢谢你,戈登。