You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改ROLLUP生成的汇总行指定列文本并避免重复行

如何修改ROLLUP生成的汇总行指定列文本并避免重复行

嘿,我来帮你搞定这个问题!你现在遇到的是ROLLUP汇总行的自定义显示和重复行问题,咱们直接调整你的SQL语句就能解决:

首先,核心思路是利用GROUPING()函数识别ROLLUP生成的汇总行,再用CASE语句把汇总行的「Nazwisko」列替换成你想要的「Sum:」;同时完善GROUP BY的列并加过滤条件,避免出现重复的汇总行。

修改后的完整SQL如下:

SELECT
    orders.order_id AS "Nr. zamówienia",
    orders.order_date AS "Data zamówienia",
    products.name AS "Nazwa produtku",
    products.price AS "Cena produtku",
    orders.count AS "Ilość",
    clients.client_id AS "Numer klienta",
    clients.first_name AS "Imię",
    -- 用CASE判断是否为汇总行,替换Nazwisko内容
    CASE 
        WHEN GROUPING(orders.order_id) = 1 THEN 'Sum:'
        ELSE clients.last_name 
    END AS "Nazwisko",
    SUM(orders.count * products.price) AS "Cena Łączna"
FROM orders
INNER JOIN clients ON orders.client_id = clients.client_id
INNER JOIN products ON orders.product_id = products.product_id
WHERE orders.client_id = 215234
-- 把所有非聚合的列都加入GROUP BY,避免生成多余的中间汇总行
GROUP BY orders.order_id, orders.order_date, products.name, products.price, orders.count, clients.client_id, clients.first_name, clients.last_name WITH ROLLUP
-- 过滤掉不需要的中间行,只保留订单明细和最终汇总行
HAVING GROUPING(orders.order_id) = 0 OR GROUPING(clients.last_name) = 1;

我给你拆解下关键修改点:

  • 自定义汇总行文本:GROUPING(orders.order_id) = 1会识别出ROLLUP生成的总汇总行(这一行的order_id会被置为NULL,GROUPING函数返回1),此时用CASE把「Nazwisko」列改成「Sum:」,其他行正常显示客户姓氏。
  • 避免重复行:你之前只按orders.order_id分组加ROLLUP,会生成很多中间汇总行;现在把所有非聚合的列都加入GROUP BY,再用HAVING过滤,只保留每个订单的明细行和最后的总汇总行,就不会有重复的行出现了。

如果你的数据库(比如MySQL、PostgreSQL)对GROUP BY的语法细节有不同要求,稍微调整下GROUP BY的列顺序或者HAVING条件就行,核心逻辑是通用的~

备注:内容来源于stack exchange,提问作者kompus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 09:04:33