sql - 连接主表和两个事实表
问题描述
我在加入数据期间面临问题。我有如下表格
表格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
有人可以指导我如何做到这一点。
谢谢
瑞瓦蒂
解决方案
经过一番讨论并再次查看数据后,我了解您在寻找什么以及问题所在。如果 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_2
和Table_3
推荐阅读
- bash - 意外的标记“(”定义一个函数来替换 bash 中的别名
- css - 在特定视图上的 Rails 应用程序中不工作的问题
- java - 调度程序作为 Spring Boot 中的依赖项
- nltk - 您可以通过 Poetry 下载 NLTK 数据吗?
- python - 同时为多个按钮设置样式
- android - Dagger2 为 Android 中的 ViewModel 提供 ApplicationContext
- r - 在 Linux Mint LMDE4 上安装 R.4.0
- c - 是否有不应用作命令行参数的标志?
- javascript - 如何让文本突出显示跨多个元素工作?
- python-3.x - 在嵌套字典中添加新的(键,值)对 - python3