首页 > 解决方案 > 连接主表和两个事实表

问题描述

我在加入数据期间面临问题。我有如下表格

表格1

ID  AMT Product
1   10   P1
2   20   P1
3   30   P2
4   40   P2
5   10   P3

表2

ID1  AMT1
1   10
1   20
1   30
2   20
3   10

表3

ID3 AMT3
1   20
1   40
2   50
5   20

表 1 是主表,表 2 和表 3 是事实表。使用以下查询加入主表和事实表后,我得到了结果 见附件。我使用以下查询来加入表格。

SELECT * 
FROM [dbo].[Table_1] a 
left join [dbo].[Table_2] b on a.ID=b.ID1 
Left Join [dbo].[Table_3] c on b.ID1=c.ID2

我想加入所有 3 个表,在产品级别聚合 AMT1 数据时加入后,我需要以下输出

Product Amt1
P1       80
P2       10

有人可以指导我如何做到这一点。

谢谢

瑞瓦蒂

标签: sqlsql-serversql-server-2008

解决方案


经过一番讨论并再次查看数据后,我了解您在寻找什么以及问题所在。如果 AMT1 和 AMT2 值有多个唯一组合,则它们的值将重复。下面的解决方案可能不是最有效的,但它使用UNION分别执行每个连接,AMT 的空值不包含在查询的该部分中:

SELECT z.Product, SUM(z.AMT1), SUM(z.AMT2) 
FROM (
    SELECT a.Product, b.AMT1, NULL as 'AMT2'
    FROM [dbo].[Table_1] a 
    left join [dbo].[Table_2] b on a.ID=b.ID1
UNION ALL
    SELECT a.Product, NULL as 'AMT1', b.AMT2
    FROM [dbo].[Table_1] a 
    left join [dbo].[Table_3] b on a.ID=b.ID2
) as 'z' 
GROUP BY z.Product;

注意:这也更正了连接逻辑中的问题。这两个两列表都需要基于表进行连接,包括Product因为您是按字段分组Product,而不是连接Table_2Table_3


推荐阅读