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

Откуда:
Сообщений: 1
Есть таблица примерно такого вида:
id  a   b

1 1 2
1 2 3
1 3 4
2 1 5
2 2 6

можно ли одним запросом получить такой результат:

id a=1 a=2 a=3
1 2 3 4
2 5 6 NULL

в строке соответственно перечисляются значения "b" с заданными "id" и "a"
если добавить в таблицу строку где например a=4, то в результате должен появиться еще один столбец

если делать по 1 запросу на каждую пару "id" и "a", а потом руками собирать результирующую таблицу, то получается слишком медленно. может есть способы быстрее?
заранее спасибо :)
13 фев 04, 05:31    [534090]     Ответить | Цитировать Сообщить модератору
 Re: Переменное количество столбцов  [new]
Aleksey777
Member

Откуда: Novosibirsk
Сообщений: 227
поиском поработайте
много раз обсуждалось
13 фев 04, 05:47    [534092]     Ответить | Цитировать Сообщить модератору
 Re: Переменное количество столбцов  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
Какой сервер 7 или 2000 ?
13 фев 04, 06:18    [534103]     Ответить | Цитировать Сообщить модератору
 Re: Переменное количество столбцов  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873

select 1 as [id],1 as a,2 as b into #table
union all select 1,2,3
union all select 1,3,4
union all select 2,1,5
union all select 2,2,6
--union all select 3,4,9


declare @ValueA varchar(10),@sql varchar(8000)
set @sql = 'select [ID], $ValueA from #Table group by [ID]'
declare [все_значения_a] cursor local forward_only for
select distinct cast(a as varchar(10)) from #Table order by cast(a as varchar(10))
open [все_значения_a]
fetch next from [все_значения_a] into @ValueA
while @@fetch_status=0
begin
set @sql = Replace(@sql,'$ValueA','max(case when a = '+@ValueA+' then b else null end) as [a='+@ValueA+'],$ValueA')
fetch next from [все_значения_a] into @ValueA
end
set @sql = Replace(@sql,',$ValueA','')
exec(@sql)
close [все_значения_a]
deallocate [все_значения_a]

drop table #Table

13 фев 04, 06:34    [534108]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить