SQL联接只匹配第一个实例
我有两张桌子,文件相同,但ID不同 此表的每一行都可能有重复的unic id值。 我想与这个表进行连接,但将表a中的第一个ocurrence与表b中的de first ocurrence连接起来。表A中的第二个实例与表B中的第二个实例不重复连接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** ----------------------------------
**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;