таблица 1
Groupname View
member table a
non member table b
teacher table c
таблица a
id key
1 A
2 B
3 C
ТАБЛИЦА B
ID KEY
1 M
2 L
3 H
4 G
5 F
ТАБЛИЦА C
ID KEY
1 Y
2 W
выход
GROUPNAME KEY
member A
member B
member C
non member M
non member L
non member H
non member G
non member F
teacher Y
teacher W
Как уже отмечал Гордон Линофф: Я думаю, что ваш дизайн базы данных может использовать некоторую работу. Если бы вам пришлось писать динамический SQL, чтобы создать тот же тип структуры запросов, что и Гордон, созданный в его ответе, это могло бы сделать трюк (если бы каждый вид имел «ключевую» переменную, а таблицы были сделаны с использованием схемы по умолчанию ).
declare @t1 table ([groupname] varchar(20), [view] varchar(20))
insert into @t1 values ('member','table a'),('non member','table 3'),('teacher','table 4')
declare @q varchar(max)='', @groupname varchar(20),@viewname varchar(20)
declare c cursor for select [groupname],[view] from @t1
open c
fetch next from c into @groupname, @viewname
while @@FETCH_STATUS=0
begin
set @q=@q+'select '''+@groupname+''' as Groupname, '+QUOTENAME(@viewname)+'.[key] from '+QUOTENAME(@viewname)+'{$crlf}union all{$crlf}'
fetch next from c into @groupname, @viewname
end
close c
deallocate c
set @q=replace(left(@q,len(@q)-23),'{$crlf}',CHAR(10))
print @q
exec (@q)
Если вы хотите сделать это с помощью одного запроса, вы можете также жестко указать имена и использовать union all:
select 'member' as groupname, key
from a
union all
select 'non member' as groupname, key
from a
union all
select 'teacher' as groupname, key
from a;
Я имею в виду, вы могли бы заменить подзапросы:
select t1.groupname, key
from a join
table1 t1
on t1.view = 'a';
Однако жесткое кодирование имени представления по сравнению с groupname кажется произвольным.
Если вы хотите сделать это более динамично, вам нужно будет использовать динамический SQL. Вместо этого я бы посоветовал вам изменить структуру данных, объединив три таблицы и добавив столбец groupname. Хранение имен таблиц и столбцов в таблицах обычно не является хорошим подходом к дизайну базы данных.