Sql 将主表和明细表合并为一个表

Sql 将主表和明细表合并为一个表,sql,sql-server,Sql,Sql Server,我有一个主表和详细表如下 主表 Id code Name ------------------- 1 00 qqq Id code Name ------------------- 1 01 xyz 1 02 pqr 1 03 abc 1 04 aaa 明细表 Id code Name ------------------- 1 00 qqq Id code

我有一个主表和详细表如下

主表

Id    code   Name
-------------------
1     00     qqq
Id    code   Name
-------------------
1     01     xyz
1     02     pqr
1     03     abc
1     04     aaa
明细表

Id    code   Name
-------------------
1     00     qqq
Id    code   Name
-------------------
1     01     xyz
1     02     pqr
1     03     abc
1     04     aaa
现在我需要下面这样的结果

结果

Id    code  Name
-----------------
1     00    qqq
1     01    xyz
1     02    pqr
1     03    abc
1     04    aaa
我喜欢避免联合


提前感谢:)

我不知道你为什么不想使用Union

但如果你不想使用union,你可以使用它。类似这样的事情-

SELECT COALESCE(Master1.id, Detail.id) AS id
    ,COALESCE(Master1.code, Detail.code) AS code
    ,COALESCE(Master1.NAME, Detail.NAME) AS NAME
FROM MASTER1
FULL OUTER JOIN DETAIL ON Master1.code = Detail.code
输出 检查SQL FIDLE


实现这一目标的方法有很多。。。您可以尝试创建一个临时表并将所有数据推入其中,然后选择不同类型的内容

下面是使用CTE的另一种方法,让我们知道它是否适合您

CREATE TABLE #Master
( ID INT, Code VARCHAR(50), Name VARCHAR(50))

CREATE TABLE #Details 
( ID INT, Code VARCHAR(50), Name  varchar(50))

INSERT INTO #Master values(1,'00', 'qqq')

INSERT INTO #Details values(1,'01', 'xyz')
INSERT INTO #Details values(1,'02', 'pqr')
INSERT INTO #Details values(1,'03', 'abc')
INSERT INTO #Details values(1,'04', 'aaa')


; WITH CTE_RESULT AS
(
    SELECT ROW_NUMBER() OVER (PARTITION BY CODE, NAME ORDER BY CODE, NAME) ROW_NO, ID, CODE, NAME 
    FROM #Details D 
)
SELECT A.ID, A.CODE, A.NAME FROM CTE_RESULT A 
INNER JOIN #Master M ON M.ID=A.ID WHERE ROW_NO=1

如果表不够大,您可以创建一个临时表,并使用

插入temp_表格,从详细信息中选择*

插入temp_表格,从主菜单中选择*

或者,如果需要,也可以使用下面提到的查询来组合表的数据


插入到主菜单中,从详细信息中选择*

您想避免使用
联合
的任何原因?是的,因为这是一个复杂的查询。我必须结合其他参数来查询数据。@Srinivas:检查我的答案……为什么不使用ISNULL而不是COALESCE?@CiucaS:使用ISNULL可以获得相同的结果。我知道,但我认为使用COALESCE是有原因的,感谢大家的讨论。这对我帮助很大。