Sql server T-SQL:如何在不创建额外行的情况下连接表-需要一行到一行的对应关系
我有一个场景,我需要连接两个SQL表,并且正在努力解决如何连接。 假设在表A中,我有:Sql server T-SQL:如何在不创建额外行的情况下连接表-需要一行到一行的对应关系,sql-server,tsql,join,iteration,sql-server-2008-r2,Sql Server,Tsql,Join,Iteration,Sql Server 2008 R2,我有一个场景,我需要连接两个SQL表,并且正在努力解决如何连接。 假设在表A中,我有: ColA ColB ColC ColD 45 55 17 45 45 55 17 47 45 55 17 49 45 55 17 51 ColA ColB ColC ColE 45 55 17 55 45 55 17 56 45 55
ColA ColB ColC ColD
45 55 17 45
45 55 17 47
45 55 17 49
45 55 17 51
ColA ColB ColC ColE
45 55 17 55
45 55 17 56
45 55 17 57
45 55 17 58
在表B中,我有:
ColA ColB ColC ColD
45 55 17 45
45 55 17 47
45 55 17 49
45 55 17 51
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中获取匹配的行号
如果您有任何想法,我们将不胜感激。至少假设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
您使用的是哪个版本的SQl Server,以及如何确定它们的匹配顺序。另外,看一下行号是的,这也是我的建议。这个解决方案给了我我想要的!!非常感谢,你们太棒了!