2012-03-02 2 views
1

Я искал некоторые темы здесь, но не было никаких ответов, которые мне нужны. Я хочу сделать запрос, где я присоединюсь к таблице, основываясь на имени столбца в первой таблице.выберите записи из таблицы, указанной как имя столбца. Динамический sql

Я использую сервер sql, поэтому было бы полезно, если кто-то знает решение для этой технологии.

Вот пример того, что я хочу сделать:

Столы:

main_table 
---------- 
id | tab  | another_col 
---------------------- 
1 | product_x | abcd 
2 | product_y | efgh 


table_product_x 
---------------------- 
id | yyy 
---------------------- 
1 | simple_yyy_value1 


table_product_y 
---------------------- 
id | yyy 
---------------------- 
2 | simple_yyy_value4 

Выходные:

product_x | simple_yyy_value1 | abcd 
product_y | simple_yyy_value4 | efgh 

Запрос (эскиз)

select tab, yyy, another_col from main_table 
join 'table_'+tab xxx on xxx.id = main_table.id 
+0

Было бы полезно, если бы вы могли бы добавить некоторые выборочные данные для таблиц и ожидаемого выхода на вопрос. –

+0

Уже обновлено – nosbor

ответ

1

Вы можете построить это, используя union all и некоторый динамический SQL.

declare @SQL nvarchar(max) 
declare @Pattern nvarchar(100) 

set @Pattern = 'select ''[TABLE_NAME]'' as TableName, yyy from table_[TABLE_NAME]' 

select @SQL = stuff((select ' union all '+replace(@Pattern, '[TABLE_NAME]', tab) 
        from main_table 
        for xml path(''), type).value('.', 'nvarchar(max)'), 1, 11, '') 

exec (@SQL) 

Оператор казнены будет выглядеть примерно так:

select 'product_x' as TableName, yyy 
from table_product_x 
union all 
select 'product_y' as TableName, yyy 
from table_product_y 
+0

Хорошее решение, но как я могу присоединиться к этому выбору? Посмотрите пример вывода в моем вопросе. – nosbor

+0

@ nosbor Я не понимаю. Это даст вам результат, который вы хотите. С чем вам нужно присоединиться? Пожалуйста, обновите свой вопрос. –

+0

Ваш запрос дает имя таблицы в первом столбце вместо столбца табуляции из main_table. Я обновил свой вопрос, чтобы подчеркнуть, что я хочу делать. См. Main_table, образец запроса и вывод. – nosbor

Смежные вопросы