Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выборка из таблицы по определённым полям, id которых записаны в другой таблице  [new]
uoepvf
Member

Откуда:
Сообщений: 2
Добрый день!
Подскажите пожалуйста как сделать
Есть таблица table и у неё есть поля id1, id2,...,id10
Также есть вторая таблица idtable с полем "p" с значениями от 1 до 10, но могут быть пропуски например не будет значения 6 и 7

Как можно получить значения из таблицы table из полей id(p) - где p значение из таблицы idtable
4 апр 18, 11:53    [21311150]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из таблицы по определённым полям, id которых записаны в другой таблице  [new]
court
Member

Откуда:
Сообщений: 2021
uoepvf,

проще всего будет динамический запрос сделать.

Но если к-во этих "id1, id2,...,id10" - конечно, можно "поизгаляться" с pivot/unpivot
4 апр 18, 11:59    [21311188]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из таблицы по определённым полям, id которых записаны в другой таблице  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
uoepvf,

Select table.* 
From table 
join idtable on 
case idtable.p 
 When 1 Then table.id1
 When 2 Then table.id2
 When 3 Then table.id3
 ......
 When 10 Then table.id10 end = idtable.id
4 апр 18, 12:31    [21311323]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из таблицы по определённым полям, id которых записаны в другой таблице  [new]
court
Member

Откуда:
Сообщений: 2021
Kopelly,

имхо, в сабже, речь про вывод по условию, а не про джойн по условию ...

declare @t table (id1 int, id2 int, id3 int, id4 int)
insert into @t values
	(11,12,13,14)
	,(21,22,23,24)
	,(31,32,33,34)
	,(41,42,43,44)

declare @q table (p int)
insert into @q values (1),(3)

;with cte as (
	select 
		val, cast(substring(id,3,100) as int) as id 
	from @t t
	unpivot (val for id in(id1, id2, id3, id4)) as unpvt 
)
select * from cte 
where id in (select p from @q)


или совсем "по-простому"
declare @SQL nvarchar(max)=''

select @SQL=@SQL+case when @SQL<>'' then ' union all ' else '' end + 'select id'+cast(p as nvarchar)+' from @t' from @q
print @SQL	-- select id1 from @t union all select id3 from @t
exec (@SQL)
4 апр 18, 12:41    [21311369]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из таблицы по определённым полям, id которых записаны в другой таблице  [new]
uoepvf
Member

Откуда:
Сообщений: 2
court
Kopelly,

declare @SQL nvarchar(max)=''

select @SQL=@SQL+case when @SQL<>'' then ' union all ' else '' end + 'select id'+cast(p as nvarchar)+' from @t' from @q
print @SQL	-- select id1 from @t union all select id3 from @t
exec (@SQL)


Так всё получилось, всё работает, но как только "засовываю" в ХП не работает выдаёт пустой результат запрос, если запускать не в ХП, то результат выдаёт
25 апр 18, 16:50    [21368590]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить