Sql server 数据库B和C中表中的所有行,只有数据库A中表中唯一的行

Sql server 数据库B和C中表中的所有行,只有数据库A中表中唯一的行,sql-server,microsoft-dynamics,dynamics-gp,Sql Server,Microsoft Dynamics,Dynamics Gp,我需要从存在于多个数据库中的表中选择数据,这取决于以特定方式排除重复项。数据是这样的,数据库B和C中的行可能包含与数据库A中的行相同的帐户段(SGMNTID)。如果是这样,我们希望从B或C数据库中选择该行,并从A数据库中排除该行 所以我认为这本质上是对B和C中所有行的选择,与B和C相比,是对a中唯一行的选择 A.DBO.GL40200 ----- SGMNTID DSCRIPTN 10 ABN Tech 20 ABN Financial 40 Quo USA 41

我需要从存在于多个数据库中的表中选择数据,这取决于以特定方式排除重复项。数据是这样的,数据库B和C中的行可能包含与数据库A中的行相同的帐户段(SGMNTID)。如果是这样,我们希望从B或C数据库中选择该行,并从A数据库中排除该行

所以我认为这本质上是对B和C中所有行的选择,与B和C相比,是对a中唯一行的选择

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
但是查看数据时,一个简单的联合也会起作用,因为
union
删除重复项

 SELECT * FROM A
 UNION 
 SELECT * FROM B
 UNION 
 SELECT * FROM C

不同的表或数据库?您是否在GP中使用多个公司?请更正在GP中使用多个公司。这是不同公司数据库中的同一个表。只有3家公司,还是动态的?也许写一个带有联合的子查询,然后过滤掉外部查询?如果公司数量未知,则可能需要动态SQL。具有相同ID的A和B上的行之间是否存在差异?现在他们看起来是一样的,所以三个人的结合会给你想要的结果。他们不一样。在某些情况下,描述略有不同。我现在面临的情况是,有人已经尝试建立一个基本的联盟,但这不起作用。
 SELECT * FROM A
 UNION 
 SELECT * FROM B
 UNION 
 SELECT * FROM C