【发布时间】:2015-02-14 12:38:37
【问题描述】:
我不确定问题标题是否合适。我的问题类似于线程 How to Join Multiple Detail Tables to Header Table 。但这也给出了重复的记录。
这是我的情况
我有一个主表和两个详细表。
MasterID | Name
----------------------- // Master table
1 Item1
2 Item2
3 Item3
4 Item4
5 Item5
-----------------------
Det1ID | FKMasterID | Value
-----------------------------
1 1 Det1-Val1
2 1 Det1-Val2
3 2 Det1-Val3
Det2ID | FKMasterID | Value
-----------------------------
1 1 Det2-Val1
2 1 Det2-Val2
3 1 Det2-Val3
4 3 Det2-Val4
5 5 Det2-Val5
----------------------------------
表格有点像这样。
当我进行所需的左右连接时,我会以这种方式得到结果。
MasterID | Name | Det1ID | Det1Value | Det2ID | Det2Value
------------------------------------------------------------
1 Item1 1 Det1-Val1 1 Det2-Val1
1 Item1 1 Det1-Val1 2 Det2-Val2
1 Item1 1 Det1-Val1 3 Det2-Val3
1 Item1 2 Det1-Val2 1 Det2-Val1
1 Item1 2 Det1-Val2 2 Det2-Val2
1 Item1 2 Det1-Val2 3 Det2-Val3
2 Item2 3 Det1-Val3 NULL NULL
3 Item3 NULL NULL 4 Det2-Val4
4 Item4 NULL NULL NULL NULL
5 Item5 NULL NULL 5 Det2-Val5
-------------------------------------------------------------
我期望得到的是
MasterID | Name | Det1ID | Det1Value | Det2ID | Det2Value
------------------------------------------------------------
1 Item1 1 Det1-Val1 1 Det2-Val1
1 Item1 2 Det1-Val2 2 Det2-Val2
1 Item1 NULL NULL 3 Det2-Val3
2 Item2 3 Det1-Val3 NULL NULL
3 Item3 NULL NULL 4 Det2-Val4
4 Item4 NULL NULL NULL NULL
5 Item5 NULL NULL 5 Det2-Val5
------------------------------------------------------------
我不希望任何主项目的详细信息值重复。
有没有办法做到这一点?只有用游标迭代才是方法?? 一点帮助表示赞赏。
谢谢,
【问题讨论】:
-
您的 Det1Id 和 Det2Id 值在您的实际或预期输出中都没有意义。请显示您的查询、准确的输入、准确的输出和所需的准确输出。
-
如果您的问题与其他问题相似,请说明该问题的哪一部分不适用于您的情况。
-
因此,如果详细信息 1 中有 3 个 MasterID=1 行,详细信息 2 有 100 行,那么您将输出 100 MasterID=1 行,其中 Det2Values 是从详细信息 2 以相同顺序向下的 100,并且Det1Values 是细节 1 中的 3,以相同的顺序向下,后跟 97 个空值?
-
正是@philipxy! D1 中有 100 个细节和 97 个空值 + 3 个细节 n D2。 mwillemse 解决方案实现了它,但正如我在该答案的评论中提到的一个问题。
-
请在您的问题中描述您想要的内容以及正确的数据。评论是短暂的。
标签: sql-server join multiple-tables