T-SQL: как объединять таблицы без создания дополнительных строк - требуется соответствие строки в одну строку - PullRequest
2 голосов
/ 08 сентября 2011

У меня есть сценарий, в котором мне нужно объединить две таблицы SQL, и я пытаюсь понять, как это сделать.Допустим, в таблице AI есть это:

ColA  ColB   ColC   ColD
45     55     17     45
45     55     17     47
45     55     17     49
45     55     17     51

И в таблице BI есть это:

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?

Буду признателен за любые мысли.

1 Ответ

5 голосов
/ 08 сентября 2011

Предполагается, по крайней мере, 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  
...