报表分组 sql 书写求教

2020-10-27 18:08:26 +08:00
 madworks
做一个类似下面链接的报表,要求列行均能动态选择字段分组,还要小计总计,排序。目前有这样一个困难,对于列分组,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
1482 次点击
所在节点    Java
2 条回复
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
2020-10-28 09:44:12 +08:00
@echoe sql 符合要求,首先感谢写这么一段,而且还要建表什么挺繁琐的,感谢,就是字段状态值多的话是不是就不太适用了,sql 要写太长了,而且这边是要求可以动态选择字段分组的,想想还是挺麻烦的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/719136

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX