Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server T-SQL:如何在不创建额外行的情况下连接表-需要一行到一行的对应关系_Sql Server_Tsql_Join_Iteration_Sql Server 2008 R2 - Fatal编程技术网

Sql server T-SQL:如何在不创建额外行的情况下连接表-需要一行到一行的对应关系

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

我有一个场景,我需要连接两个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     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,以及如何确定它们的匹配顺序。另外,看一下行号是的,这也是我的建议。这个解决方案给了我我想要的!!非常感谢,你们太棒了!