68C*_*Guy 2 t-sql sql-server iteration join sql-server-2008-r2
我有一个场景,我需要加入两个SQL表,我正在努力如何做到这一点.让我们在表AI中说:
ColA ColB ColC ColD
45 55 17 45
45 55 17 47
45 55 17 49
45 55 17 51
Run Code Online (Sandbox Code Playgroud)
在表BI中有这样的:
ColA ColB ColC ColE
45 55 17 55
45 55 17 56
45 55 17 57
45 55 17 58
Run Code Online (Sandbox Code Playgroud)
我需要创建一个看起来像这样的表 - 只注意4行,而不是我正在使用的内连接产生的16行.
ColA ColB ColC ColD ColE
45 55 17 45 55
45 55 17 47 56
45 55 17 49 57
45 55 17 51 58
Run Code Online (Sandbox Code Playgroud)
我几乎没有想法.两个表总是具有相同的行数.有没有办法使用连接执行此操作,还是应该遍历表A(即获取行号)并获取表B中的匹配行号?
任何想法将不胜感激.
假设至少SQL Server 2005
WITH T1
AS (SELECT *,
ROW_NUMBER() OVER (PARTITION BY ColA, ColB, ColC ORDER BY ColD)
RN
FROM TableA),
T2
AS (SELECT *,
ROW_NUMBER() OVER (PARTITION BY ColA, ColB, ColC ORDER BY ColE)
RN
FROM TableB)
SELECT T1.ColA,
T1.ColB,
T1.ColC,
T1.ColD,
T2.ColE
FROM T1
JOIN T2
ON T1.ColA = T2.ColA
AND T1.ColB = T2.ColB
AND T1.ColC = T2.ColC
AND T1.RN = T2.RN
Run Code Online (Sandbox Code Playgroud)