我有一个场景,我需要加入两个SQL表,并且正在努力解决这个问题。 让我们在表A中说,我有这个:
ColA ColB ColC ColD
45 55 17 45
45 55 17 47
45 55 17 49
45 55 17 51
在表B中我有这个:
ColA ColB ColC ColE
45 55 17 55
45 55 17 56
45 55 17 57
45 55 17 58
我需要创建一个看起来像这样的表 - 只注意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
我几乎没有想法。两个表总是具有相同的行数。有没有办法使用连接执行此操作,还是应该遍历表A(即获取行号)并获取表B中的匹配行号?
任何想法都会非常感激。
答案 0 :(得分:5)
至少假设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