V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
madworks
V2EX  ›  Java

报表分组 sql 书写求教

  •  
  •   madworks · 2020-10-27 18:08:26 +08:00 · 1476 次点击
    这是一个创建于 1270 天前的主题,其中的信息可能已经有所发展或是发生改变。
    做一个类似下面链接的报表,要求列行均能动态选择字段分组,还要小计总计,排序。目前有这样一个困难,对于列分组,sql 里直接 select sum(fee) fee from xx group by column1,column2...with rollup,sql 结果集只会显示有值的行,比如 column1,column 分别都有 2 个状态 0 和 1,但只有 column1=0 和 column2=1 有记录,我现在需要一个 sql 不仅可以查出 column1=0 和 column2=1 的记录,还要查出 column1=0/1,column2=0/1 所有 4 个组合的记录,没有值的记录直接赋 0

    https://vkceyugu.cdn.bspapp.com/VKCEYUGU-imgbed/0dfbb436-d5b1-493e-b0d9-2918aecd145e.png

    https://vkceyugu.cdn.bspapp.com/VKCEYUGU-imgbed/9911fb0b-6f1a-4087-8dfc-824ab0b7efa0.png
    2 条回复    2020-10-28 09:44:12 +08:00
    echoe
        1
    echoe  
       2020-10-27 19:50:07 +08:00
    SELECT IFNULL(SUM(a.fee), 0) fee, b.column1, b.column2
    FROM xx a RIGHT JOIN (SELECT 0 AS column1, 0 AS column2) b
    ON a.column1=b.column1 AND a.column2=b.column2
    GROUP BY a.column1, a.column2
    UNION ALL
    SELECT IFNULL(SUM(a.fee), 0) fee, b.column1, b.column2
    FROM xx a RIGHT JOIN (SELECT 0 AS column1, 1 AS column2) b
    ON a.column1=b.column1 AND a.column2=b.column2
    GROUP BY a.column1, a.column2
    UNION ALL
    SELECT IFNULL(SUM(a.fee), 0) fee, b.column1, b.column2
    FROM xx a RIGHT JOIN (SELECT 1 AS column1, 0 AS column2) b
    ON a.column1=b.column1 AND a.column2=b.column2
    GROUP BY a.column1, a.column2
    UNION ALL
    SELECT IFNULL(SUM(a.fee), 0) fee, b.column1, b.column2
    FROM xx a RIGHT JOIN (SELECT 1 AS column1, 1 AS column2) b
    ON a.column1=b.column1 AND a.column2=b.column2
    GROUP BY a.column1, a.column2
    madworks
        2
    madworks  
    OP
       2020-10-28 09:44:12 +08:00
    @echoe sql 符合要求,首先感谢写这么一段,而且还要建表什么挺繁琐的,感谢,就是字段状态值多的话是不是就不太适用了,sql 要写太长了,而且这边是要求可以动态选择字段分组的,想想还是挺麻烦的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1706 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 16:39 · PVG 00:39 · LAX 09:39 · JFK 12:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.