SQL Server объединяет таблицы без первичного ключа, используя общие столбцы - PullRequest
0 голосов
/ 10 мая 2018

у меня 2 таблицы

     Id   Name   Units sold
     1    n1,       100 
     2    n2,       95 
     3    n3,       84 
     4    n3,       84 
     5    n5,       100 



  Name   Units sold  Excess Units  Table1_Id
     n1,       100      51            9
     n2,       95       43            10
     n3,       84       100           11
     n3,       84       33            12
     n5,       100      10            13

У меня нет способа объединить эти 2 таблицы, поскольку Table1_Id на самом деле является Id временной таблицы, которая загружает обе эти таблицы.
Эта таблица стирается после каждой загрузки.

Я хочу показать лишние единицы в первой таблице.

Пока мой подход был

select table1.*, table2.Excess_units from Table1 inner join
Table2 on Table1.Name = Table2.Name and Table1.Units_sold = Table2.Units_Sold

Однако я волнуюсь, что могу столкнуться с ситуацией, когда я получу 2 записи таблицы 2, и я не буду знать, какая из них соответствует таблице 1

Например:

При выборе n3 записей, как я могу связать first and second n3 записи Table1 с first and second n3 записями Table2?

1 Ответ

0 голосов
/ 10 мая 2018

используйте row_number() для генерации последовательности no для присоединения

select *
from
(
    select *, rn = row_number() over(partition by name, units_sold order by name)
    from   Table1
) t1
inner join
(
    select *, rn = row_number() over(partition by name, units_sold order by name)
    from   Table2
) t2
on  t1.name = t2.name and t1.units_sold = t2.units_sold and t1.rn = t2.rn
...