Как указывает Гордон Линофф, то, что вы просите, требует динамичности c SQL. То есть создайте строку запроса из содержимого mapping_table
, а затем выполните ее.
Обратите внимание:
declare
@q1 nvarchar(max),
@q2 nvarchar(max),
@q nvarchar(max)
;
select
@q1 = string_agg(table1 + ' as ' + output, ', ') within group(order by output),
@q2 = string_agg(table2, ', ') within group(order by output)
from mapping_table;
set @q = 'select ' + @q1 + N' from table1 union all select ' + @q2 + ' from table2'
--debug
select @q;
-- execute
EXEC sp_executesql @q;
Для ваших примеров данных сгенерированный запрос (я добавил разрывы строк и отступ для лучшей читаемости):
select First_Name as FirstName, Last_Name as LastName, Telephone_Number as TelephoneNbr
from table1
union all
select F_Name, L_Name, Tel_Nbr from table2
Демонстрация на DB Fiddle