【问题标题】:T-SQL: How to join tables without creating extra rows - need a one row to one row correspondanceT-SQL:如何在不创建额外行的情况下连接表 - 需要一行到一行的对应关系
【发布时间】:2011-11-12 22:05:00
【问题描述】:

我有一个场景,我需要加入两个 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 中获取匹配的行号?

任何想法将不胜感激。

【问题讨论】:

标签: sql-server tsql join iteration sql-server-2008-r2


【解决方案1】:

假设至少 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  

【讨论】:

  • 是的,这也是我推荐的。
  • 这个解决方案正是我想要的!非常感谢,你们太棒了!
猜你喜欢
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-25
  • 1970-01-01
相关资源
最近更新 更多