Объединение двух таблиц SQL на основе добавочного значения псевдонима

#sql #sql-server #join #left-join

#sql #sql-сервер #Присоединиться #слева-объединение

Вопрос:

У меня есть одна таблица с именем @myTable, которая возвращает циклическое инкрементное значение с именем am_id. Я сохраняю некоторые переменные с идентификаторами в другой таблице с именем @myTableVariable.

 DECLARE @myTable TABLE (id INT, name varchar(20))
insert into @myTable values(1,'one  '),(2,'two  '),(3,'three'),(4,'four'),(5,'five'),(6,'six'),(7,'seven'),(8,'eight'),(9,'nine'),(10,'ten'),(11,'eleven'),(12,'twelve'),(13,'thirteen')

DECLARE @myTableVariable TABLE (id INT, name varchar(20))
insert into @myTableVariable values(1,'Roberto'),(2,'Gail'),(3,'Dylan'),(4,'Ben')
select * from @myTableVariable

declare @start decimal(10)=1;
declare @end decimal(10)=4;
declare @increment decimal(10)=1;

SELECT f.name, (@start   @increment * (row_number() over (order by id) - 1) % cast(1   round((@end - @start) / @increment, 0) as int)) AS am_id
FROM @myTable AS f
  

Я хотел бы объединить две таблицы в @myTable.am_id = @myTableVariable.id однако объединение с использованием псевдонима невозможно…

 SELECT f.name, (@start   @increment * (row_number() over (order by id) - 1) % cast(1   round((@end - @start) / @increment, 0) as int)) AS am_id
FROM @myTable AS f
LEFT JOIN @myTableVariable AS v ON v.vid = am_id 
  

Есть идеи, как я могу объединить эти таблицы?

Большое спасибо

Ответ №1:

Используйте подзапрос, а затем присоединяйтесь

 SELECT * FROM (
SELECT name, (@start   @increment * (row_number() over (order by id) - 1) % cast(1   round((@end - @start) / @increment, 0) as int)) AS am_id
FROM @myTable) AS f
LEFT JOIN @myTableVariable AS v ON v.id = f.am_id