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是有原因的,感谢大家的讨论。这对我帮助很大。