作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
除了 UNION ALL 之外,还有哪些替代方法可以连接许多表以查看来自许多源系统的聚合数据?我正在寻找 T-SQL 之外的解决方案。
假设我们有 3 个源表,我们想通过 id 连接它们:
表A
id Adata
1 8383
2 2707
3 6181
4 6708
表B
id Bdata
1 2669
1 8582
2 6335
2 7355
3 7355
3 2277
4 2789
4 8566
表C
id Adata
1 2856
2 1364
3 4476
4 3311
4 8073
我想要得到的期望结果表:
我现在获取它的原始方法(通过 UNION ALL):
如果我们有很多列和很多表,通过创建由许多彼此下的表和许多空值组成的巨大表来达到预期的结果似乎是非常令人沮丧和原始的解决方案。我认为如果我们想加入不同的信息系统(例如会计、工资、采购等),这是常见问题。
最终目标是为 Excel 用户提供聚合数据,并有机会向下钻取仅限于选定的表。例如,通过双击第一个 Bdata 11251 中的所需结果表,用户只想查看构成该数字的数据。但用户却得到了这个:
更新。我想保留深入了解数据的机会。因此,如果我双击 Excel 中的结果表,我希望能够看到每个 ID 的所有详细信息。
最佳答案
根据您的示例,一个简单的联接似乎就足够了,为什么您需要UNION ALL
?
SELECT A.id,
SUM(A.Adata),
SUM(B.Bdata),
SUM(C.Cdata)
FROM TableA A
JOIN TableB B ON A.id = B.id
JOIN TableC C ON A.id = C.id
GROUP BY A.id
如果要显示总体总计,可以使用WITH ROLLUP
:
SELECT ISNULL(sub.id,'Total') AS "id",
sub.Adata,
sub.Bdata,
sub.Cdata
FROM (
SELECT A.id,
SUM(A.Adata) AS Adata,
SUM(B.Bdata) AS Bdata,
SUM(C.Cdata) AS Cdata
FROM TableA A
JOIN TableB B ON A.id = B.id
JOIN TableC C ON A.id = C.id
GROUP BY A.id WITH ROLLUP) sub
关于sql - 获取聚合数据的 UNION ALL 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32178223/
我是一名优秀的程序员,十分优秀!