我正在尝试改进 SQL 查询以使我的报告看起来更好。我的查询从一个表中读取数据,按几列分组并计算一些聚合字段(计数和总和)。
SELECT A, B, C, COUNT(*), SUM(D) FROM T
GROUP BY A, B, C
ORDER BY A, B, C
现在,假设 B 和 C 列是一些已定义的常量字符串,例如, B 可以是'B1'
or 'B2'
, C 可以是'C1'
or 'C2'
。因此,一个示例结果集是:
A | B | C | COUNT(*) | SUM(D)
--------------------------------
A1 | B1 | C1 | 34 | 1752
A1 | B1 | C2 | 4 | 183
A1 | B2 | C1 | 199 | 8926
A1 | B2 | C2 | 56 | 2511
A2 | B1 | C2 | 6 | 89
A2 | B2 | C2 | 12 | 231
A3 | B1 | C1 | 89 | 552
...
如您所见,因为'A1'
我有所有四种可能的 (B, C) 组合,但对于'A2'
. 我的问题是:实际上,在给定的表中,如何生成不存在 (B, C) 组合的摘要行?也就是说,例如,我如何打印这些行:
A | B | C | COUNT(*) | SUM(D)
--------------------------------
A2 | B1 | C1 | 0 | 0
A2 | B2 | C1 | 0 | 0
我能看到的唯一解决方案是创建一些具有所有 (B, C) 值的辅助表,然后使用该辅助表进行 RIGHT OUTER JOIN。但我正在寻找一种更清洁的方法......
谢谢你们。