gpt4 book ai didi

sql - 获取聚合数据的 UNION ALL 的替代方案

转载 作者:行者123 更新时间:2023-12-03 05:05:33 27 4
gpt4 key购买 nike

除了 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

我想要得到的期望结果表:

enter image description here

我现在获取它的原始方法(通过 UNION ALL):

enter image description here

如果我们有很多列和很多表,通过创建由许多彼此下的表和许多空值组成的巨大表来达到预期的结果似乎是非常令人沮丧和原始的解决方案。我认为如果我们想加入不同的信息系统(例如会计、工资、采购等),这是常见问题。

最终目标是为 Excel 用户提供聚合数据,并有机会向下钻取仅限于选定的表。例如,通过双击第一个 Bdata 11251 中的所需结果表,用户只想查看构成该数字的数据。但用户却得到了这个:

enter image description here

更新。我想保留深入了解数据的机会。因此,如果我双击 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com