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

Откуда:
Сообщений: 839
Задача у меня такая:
на форме есть таблица, куда вводятся нужные периоды(может быть сколько угодно)
Пример:
Период
Октябрь 2012
Ноябрь 2012
Декабрь 2012
Январь 2013

передаю этот список в процедуру в виде таблицы.
как мне получить результирующий набор в виде
Октябрь 2012Ноябрь 2012Декабрь 2012Январь 2013

смотрел faq, но там только склеивание это в строку. Pivot тоже не подходит, по причине того, что список не статичен

как сие можно решить?
спасибо
12 окт 12, 11:03    [13306860]     Ответить | Цитировать Сообщить модератору
 Re: подсткажите плиз алгоритм решения проблемы (переворот результата выборки в колонки)  [new]
Добрый Э - Эх
Guest
pivot
12 окт 12, 11:06    [13306880]     Ответить | Цитировать Сообщить модератору
 Re: подсткажите плиз алгоритм решения проблемы (переворот результата выборки в колонки)  [new]
Добрый Э - Эх
Guest
В Ф.А.К.-е две статьи на эту тему(1,2).
Обе смотрел?
12 окт 12, 11:09    [13306910]     Ответить | Цитировать Сообщить модератору
 Re: подсткажите плиз алгоритм решения проблемы (переворот результата выборки в колонки)  [new]
ther
Member

Откуда:
Сообщений: 839
Добрый Э - Эх
pivot

разве pivot умеет динамику переворачивать?
спасибо..чет эти статьи пропустил..сейчас попробую
12 окт 12, 11:19    [13307002]     Ответить | Цитировать Сообщить модератору
 Re: подсткажите плиз алгоритм решения проблемы (переворот результата выборки в колонки)  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
ther,

DECLARE @tab2 TABLE (id int, dd varchar(20))
INSERT INTO @tab2 (id, dd) VALUES  (1, 'Январь 2012')
INSERT INTO @tab2 (id, dd) VALUES  (2, 'Февраль 2012')
INSERT INTO @tab2 (id, dd) VALUES  (3, 'Март 2012')
INSERT INTO @tab2 (id, dd) VALUES  (4, 'Апрель 2012')
INSERT INTO @tab2 (id, dd) VALUES  (5, 'Май 2012')
INSERT INTO @tab2 (id, dd) VALUES  (6, 'Июнь 2012')

SELECT *
FROM @tab2 AS t
PIVOT (
  max(dd) FOR id in ([1], [2], [3], [4], [5])
) AS pvt


Может это сделать в виде динамического sql?

DECLARE @str2 varchar(max)
SET @str2 ='select 1 s'

EXEC(@str2)
12 окт 12, 11:26    [13307069]     Ответить | Цитировать Сообщить модератору
 Re: подсткажите плиз алгоритм решения проблемы (переворот результата выборки в колонки)  [new]
ther
Member

Откуда:
Сообщений: 839
trew
да я вот тоже пришел к этому. Ибо почитав тот "огород", мне аж поплохело
12 окт 12, 11:37    [13307156]     Ответить | Цитировать Сообщить модератору
 Re: подсткажите плиз алгоритм решения проблемы (переворот результата выборки в колонки)  [new]
ther
Member

Откуда:
Сообщений: 839
блин..с динамикой тоже нифига не выйдет. Я же не закину результат EXEC в таблицу, для этого надо знать структуру(
придется разгребать примеры((
12 окт 12, 11:49    [13307273]     Ответить | Цитировать Сообщить модератору
 Re: подсткажите плиз алгоритм решения проблемы (переворот результата выборки в колонки)  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
ther,

может быть так?

declare @tabl table
(
	period varchar(50)
)

insert @tabl values
('Nov 2012'),
('Dec 2012'),
('Oct 2012'),
('Jan 2013')

select period+'|' as 'data()'
from @tabl
order by convert(date,period)
for xml path('')
12 окт 12, 12:52    [13307907]     Ответить | Цитировать Сообщить модератору
 Re: подсткажите плиз алгоритм решения проблемы (переворот результата выборки в колонки)  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
Алексей Куренков,

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

declare @tabl table (id int, dd varchar(20))
insert @tabl (id, dd) values
(1, 'Январь 2012'),
(2, 'Февраль 2012'),
(3, 'Март 2012'),
(4, 'Апрель 2012'),
(5, 'Май 2012'),
(6, 'Июнь 2012')

if object_id('tempdb..#tabl','U') is not null drop table #tabl
select * into #tabl from @tabl

declare @list nvarchar(4000) = replace(
(
	select quotename(dd)+',' as 'data()'
	from @tabl
	for xml path('')
)+'!!!',',!!!','')

declare @query nvarchar(4000) = '
	select top(0) *
	into ##tabl
	from #tabl as t
	pivot (
	  max(id) for dd in ('+@list+')
	) as pvt'
print @query

if object_id('tempdb..##tabl','U') is not null drop table ##tabl
exec ( @query )

select * from ##tabl
12 окт 12, 13:08    [13308022]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить