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

Откуда: Казань
Сообщений: 254
Доброго времени суток, всем
--Таблица №1
	DECLARE  @table_1 TABLE(
	id			BIGINT,
	comp_id			BIGINT,
	value		varchar(30)
	);
	INSERT INTO @table_1  values(1,1,'aaaaa')
	INSERT INTO @table_1  values(1,2,'bbbbb')
	INSERT INTO @table_1  values(1,3,'ccccc')
	INSERT INTO @table_1  values(2,1,'dddd')
	INSERT INTO @table_1  values(2,4,'eeeee')
	
--Таблица №2
	DECLARE  @table_2 TABLE(
	comp_id			BIGINT
	);
	INSERT INTO @table_2  values(1)
	INSERT INTO @table_2  values(2)
	INSERT INTO @table_2  values(3)
	INSERT INTO @table_2  values(4)
--Нужно получить
(select 1 as id,'aaaaa' as comp_id_1, 'bbbbb' as comp_id_2,'ccccc' as comp_id_3, null as comp_id_4)
union
(select 2 as id,'dddd' as comp_id_1, null as comp_id_2,null as comp_id_3, 'eeeee' as comp_id_4)
Спасибо заранее за ответы
9 сен 11, 06:24    [11251315]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом... С утра голова не варит...  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
select * from @table_1
pivot
(max(value) for comp_id in ([1],[2],[3],[4])) pv
9 сен 11, 06:31    [11251318]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом... С утра голова не варит...  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
--Таблица №1
	create  TABLE #t1(
	id			BIGINT,
	comp_id			BIGINT,
	value		varchar(30)
	);
	INSERT INTO #t1  values(1,1,'aaaaa')
	INSERT INTO #t1  values(1,2,'bbbbb')
	INSERT INTO #t1  values(1,3,'ccccc')
	INSERT INTO #t1  values(2,1,'dddd')
	INSERT INTO #t1  values(2,4,'eeeee')
	
--Таблица №2
	create TABLE #t2 (
	comp_id			BIGINT
	);
	INSERT INTO #t2  values(1)
	INSERT INTO #t2  values(2)
	INSERT INTO #t2  values(3)
	INSERT INTO #t2  values(4)
---------------------------------------

declare @str varchar(max) = ''
select @str = @str + ',[' + cast(comp_id as varchar) + ']' from #t2
set @str = 'select * from #t1 pivot '
         + '(max(value) for comp_id in ('
         + stuff(@str,1,1,'') + ')) pv'
exec (@str)
9 сен 11, 06:42    [11251323]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом... С утра голова не варит...  [new]
rainurka
Member

Откуда: Казань
Сообщений: 254
Knyazev Alexey, спасибо большое. Никак не могу разобраться с PIVOT
9 сен 11, 10:22    [11251964]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом... С утра голова не варит...  [new]
iljy
Member

Откуда:
Сообщений: 8711
rainurka
Никак не могу разобраться с PIVOT

select * from @table_1
	pivot
	(max(value) for comp_id in ([1],[2],[3],[4])) pv
<=>

select id, MAX(case comp_id when 1 then value end) [1],
	MAX(case comp_id when 2 then value end) [2],
	MAX(case comp_id when 3 then value end) [3],
	MAX(case comp_id when 4 then value end) [4]
from @table_1
group by id
9 сен 11, 16:06    [11255055]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить