SQL联接只匹配第一个实例

SQL联接只匹配第一个实例,sql,sql-server,Sql,Sql Server,我有两张桌子,文件相同,但ID不同 此表的每一行都可能有重复的unic id值。 我想与这个表进行连接,但将表a中的第一个ocurrence与表b中的de first ocurrence连接起来。表A中的第二个实例与表B中的第二个实例不重复连接 **I have a table A wiht this fields :** product Client DATE_INIT DATE_END **ID_SISTEM_A** ----------------------------------

我有两张桌子,文件相同,但ID不同 此表的每一行都可能有重复的unic id值。 我想与这个表进行连接,但将表a中的第一个ocurrence与表b中的de first ocurrence连接起来。表A中的第二个实例与表B中的第二个实例不重复连接

**I have a table A wiht this fields :**

product  Client  DATE_INIT DATE_END **ID_SISTEM_A**
--------------------------------------------------------------

001      A      20200202  20200101   B2010 

001      A      20200202  20200101   B2011 

001      A      20200202  20200101   B2012 

**And a table B with the same filds but with a diferent ID**

product  Client  DATE_INIT DATE_END  **ID_SISTEM_B**
----------------------------------------------------------------
001     A      20200202  20200101   A001                         

001     A      20200202  20200101   A002                         

001     A      20200202  20200101   A003                         


**I would like Perform a JOIN with one for one like this result:**

Result expected

**ID_SISTEM_B   ID_SISTEM_A  
A001           B2010     

A002           B2011     

A003           B2012     
但是一个简单的连接使用左表上的第一个实例进行连接

BEGIN 

CREATE TABLE #TABLE_A (

COD_OPER INT, 
ID_CLIENTE INT, 
DATA_APLI DATE, 
DATA_VCTO DATE,
COD_SELIC INT,
COD_OPER_SAC VARCHAR(12)
)

CREATE TABLE #TABLE_B (

CD_OPER VARCHAR(12), 
ID_CLIENTE INT, 
DATA_APLI DATE, 
DATA_VCTO DATE,
COD_SELIC INT,
)

INSERT INTO #TABLE_A
VALUES 
(1000,25847,'20050507','20300928',196,null),
(1001,40528,'20081014','20260815',132,null),
(1002,70254,'20150807','20310728',164,null),
(1003,70254,'20150807','20310728',164,null),
(1004,70254,'20150807','20310728',164,null),
(1005,25847,'20061107','20300728',132,null)

INSERT INTO #TABLE_B
VALUES 
('B0245',25847,'20050507','20300928',196),
('B0246',40528,'20081014','20260815',132),
('B0247',70254,'20150807','20310728',164),
('B0248',70254,'20150807','20310728',164),
('B0249',70254,'20150807','20310728',164),
('B0250',25847,'20061107','20300728',132)


UPDATE #TABLE_A 
SET COD_OPER_SAC = B.CD_OPER
FROM 
#TABLE_A A
INNER JOIN #TABLE_B B 
ON
A.DATA_APLI = B.DATA_APLI
AND A.ID_CLIENTE = B.ID_CLIENTE
AND A.COD_SELIC = B.COD_SELIC
AND A.DATA_VCTO = B.DATA_VCTO

SELECT * FROM #TABLE_A

END 
放下桌子#桌子A 升降台#升降台#B


您可以使用
row\u number()
枚举值以“排列它们”:

RESULT:

**ID_SISTEM_B   ID_SISTEM_A** 
A001           B2010 

A002           B2010 

A003           B2010 
select a.id_system_a, b.id_system_b
from (select a.*,
             row_number() over (partition by product, client order by id_system_a) as seqnum
      from #table_a a
     ) a join
     (select b .*,
             row_number() over (partition by product, client order by id_system_b) as seqnum
      from #table_b b
     ) b
     on a.seqnum = b.seqnum;