数据库 B 和 C 中 Table 的所有行,数据库 A 中只有 Table 的唯一行
All rows from Table in Database B and C, only unique rows from Table in Database A
我需要 select 来自 table 的数据,该数据存在于多个数据库中,这取决于以特定方式排除重复项。数据是这样的,数据库 B 和 C 中的行可能包含与数据库 A 中的行相同的帐户段 (SGMNTID)。如果是这样,我们希望 select 来自 B 或 C 数据库的行并排除该行来自A数据库。
所以我相信这本质上是 B 和 C 中所有内容的 selection 以及与 B 和 C 相比仅来自 A 的唯一行的 selection。
A.DBO.GL40200
-----
SGMNTID DSCRIPTN
10 ABN Tech
20 ABN Financial
40 Quo USA
41 Quo AUS
62 PO Shanghai
B.DBO.GL40200
-----
SGMNTID DSCRIPTN
40 Quo USA
41 Quo Pt Ltd
60 PO Singapore
C.DBO.GL40200
-----
SGMNTID DSCRIPTN
62 PO Shanghai
63 PO Purchasing
所需的结果集为:
10 ABN Tech
20 ABN Financial
40 Quo USA
41 Quo Pt Ltd
60 PO Singapore
62 PO Shanghai
63 PO Purchasing
从这样的查询开始:
with q as
(
select 'A' company, *
from A.DBO.GL40200
UNION ALL
select 'B' company, *
from B.DBO.GL40200
UNION ALL
select 'C' company, *
from C.DBO.GL40200
), q2 as
(
select *, row_number() over (partition by SGMNTID, order by company desc) rn
from q
)
select SGMNTID, DSCRIPTN
from q2
where rn = 1
SELECT * FROM B
UNION
SELECT * FROM C
UNION
SELECT * FROM A WHERE SGMNTID NOT IN (SELECT SGMNTID FROM B UNION SELECT SGMNTID FROM C)
但是查看您的数据,一个简单的联合也可以工作,因为 UNION
删除重复项。
SELECT * FROM A
UNION
SELECT * FROM B
UNION
SELECT * FROM C
我需要 select 来自 table 的数据,该数据存在于多个数据库中,这取决于以特定方式排除重复项。数据是这样的,数据库 B 和 C 中的行可能包含与数据库 A 中的行相同的帐户段 (SGMNTID)。如果是这样,我们希望 select 来自 B 或 C 数据库的行并排除该行来自A数据库。
所以我相信这本质上是 B 和 C 中所有内容的 selection 以及与 B 和 C 相比仅来自 A 的唯一行的 selection。
A.DBO.GL40200
-----
SGMNTID DSCRIPTN
10 ABN Tech
20 ABN Financial
40 Quo USA
41 Quo AUS
62 PO Shanghai
B.DBO.GL40200
-----
SGMNTID DSCRIPTN
40 Quo USA
41 Quo Pt Ltd
60 PO Singapore
C.DBO.GL40200
-----
SGMNTID DSCRIPTN
62 PO Shanghai
63 PO Purchasing
所需的结果集为:
10 ABN Tech
20 ABN Financial
40 Quo USA
41 Quo Pt Ltd
60 PO Singapore
62 PO Shanghai
63 PO Purchasing
从这样的查询开始:
with q as
(
select 'A' company, *
from A.DBO.GL40200
UNION ALL
select 'B' company, *
from B.DBO.GL40200
UNION ALL
select 'C' company, *
from C.DBO.GL40200
), q2 as
(
select *, row_number() over (partition by SGMNTID, order by company desc) rn
from q
)
select SGMNTID, DSCRIPTN
from q2
where rn = 1
SELECT * FROM B
UNION
SELECT * FROM C
UNION
SELECT * FROM A WHERE SGMNTID NOT IN (SELECT SGMNTID FROM B UNION SELECT SGMNTID FROM C)
但是查看您的数据,一个简单的联合也可以工作,因为 UNION
删除重复项。
SELECT * FROM A
UNION
SELECT * FROM B
UNION
SELECT * FROM C