首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获得聚合数据的UNION ALL的替代方案

获得聚合数据的UNION ALL的替代方案
EN

Stack Overflow用户
提问于 2015-08-24 08:58:52
回答 5查看 13K关注 0票数 3

对于连接多个表以查看来自多个源系统的聚合数据,UNION所有的替代方案是什么?我正在寻找超越T的解决方案.

假设我们有3个源表,并希望通过id连接它们:

TableA

代码语言:javascript
复制
id  Adata
1   8383
2   2707
3   6181
4   6708

TableB

代码语言:javascript
复制
id  Bdata
1   2669
1   8582
2   6335
2   7355
3   7355
3   2277
4   2789
4   8566

TableC

代码语言:javascript
复制
id  Adata
1   2856
2   1364
3   4476
4   3311
4   8073

我想要得到的结果表:

--我现在所做的获得它的原始方式(由UNION完成):

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

最终目标是给和Excel用户聚合数据一个机会向下钻,仅限于选定的表。例如,通过双击第一个Bdata 11251中所需的结果表,用户将被扩展到只看到生成该数字的数据。但是,相反,用户得到了以下内容:

更新。我想保留一个在数据中向下钻取的机会。因此,如果我双击Excel中的结果表,我希望能够查看每个ID的所有细节。

EN

Stack Overflow用户

发布于 2015-08-24 09:08:55

你应该用内连接。除非某些表中缺少某些in,否则Union (All)似乎没有必要:

代码语言:javascript
复制
Select coalesce(cast(i.id as varchar(10)), 'SUM')
    , isnull(sum(A.data), '')
    , isnull(sum(B.data), '')
    , isnull(sum(C.data), '')
From (Select id From A
    Union Select id From B
    Union Select id From C
) as i
left Join A on A.id = i.id
left Join B on B.id = i.id
left Join C on C.id = i.id
group by grouping sets (i.id, ())

分组集将添加总行。

票数 1
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32178223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档