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

Откуда:
Сообщений: 6
Коллеги, здравствуйте. Имеется следующая временная таблица вида

а 1
а 2
а 10
в 20
в 1
в 600
в 44
с 34
с 1

Как из нее сделать таблицу вида
а 1 2 10 NULL
в 20 1 600 44
с 34 1 NULL NULL
?
27 апр 12, 16:22    [12481016]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выборке  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
через PIVOT
27 апр 12, 16:39    [12481207]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выборке  [new]
varvsn
Member

Откуда:
Сообщений: 6
Knyazev Alexey,
для PIVOT должны быть четко определены названия заголовков для несведенных столбцов, и их кол-во. Не тот вариант..
27 апр 12, 16:43    [12481258]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выборке  [new]
Glory
Member

Откуда:
Сообщений: 104751
varvsn
для PIVOT должны быть четко определены названия заголовков для несведенных столбцов

Ну так определите их. Пронумеруйте, например.
27 апр 12, 16:44    [12481264]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выборке  [new]
varvsn
Member

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

Как, если кол-во неизвестно? в одной строке может получиться 3 значения, в другой 100.
27 апр 12, 16:47    [12481292]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выборке  [new]
Glory
Member

Откуда:
Сообщений: 104751
varvsn
Как, если кол-во неизвестно? в одной строке может получиться 3 значения, в другой 100.

Нумеровать можно специальными функциями ранжирования
А вот прописать все имена придется вручную.
27 апр 12, 16:49    [12481305]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выборке  [new]
varvsn
Member

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

Не могли бы Вы привести пример запроса?
27 апр 12, 16:51    [12481321]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выборке  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
varvsn
Glory,

Не могли бы Вы привести пример запроса?


хел читать научитесь:

declare @t table ( a char(1), val int )
insert into @t
values('a',1),('a',2),('a',10),('b',20),('b',1),('b',600),('b',44),('c',34),('c',1); 

with cte
as
(
select row_number() over(partition by a order by val) id, * from @t
)
select * from cte
pivot
( max(val) for id in ([1],[2],[3],[4],[5])) pv
27 апр 12, 16:55    [12481362]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выборке  [new]
varvsn
Member

Откуда:
Сообщений: 6
Knyazev Alexey,

Вы сами-то читать умеете?

for id in ([1],[2],[3],[4],[5])
я дважды упоминал, что кол-во рядов неизвестно. Это не тот способ.
27 апр 12, 17:10    [12481493]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выборке  [new]
Glory
Member

Откуда:
Сообщений: 104751
varvsn
я дважды упоминал, что кол-во рядов неизвестно

Напишите миллион. С запасом
27 апр 12, 17:17    [12481554]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выборке  [new]
Strangers
Member [заблокирован]

Откуда: Україна
Сообщений: 2613
varvsn
Knyazev Alexey,

Вы сами-то читать умеете?


Коллега, вы пошто на людей на людей бросаетесь? они вас уму разуму учат, а вы ... ))))

IF OBJECT_ID('TempDB..#t') IS NOT NULL DROP TABLE #t
CREATE table #t ( a char(1), val int )
declare		@SQL varchar(max),
		@cols varchar(max)

insert into #t
values('a',1),('a',1),('a',10),('b',20),('b',1),('b',600),('b',44),('c',34),('c',1); 


set @cols = ''
select @cols = case when @cols = '' then '[' else  @cols+', [' end + cast(ID as varchar(200))+']'
FROM (select distinct row_number() over(partition by a order by val) id from #t) t

-- наименование столбцов
SELECT @cols


set @sql = N'	;with cte
				as
				(
				select row_number() over(partition by a order by val) id, * from #t
				)
				select * from cte
				pivot
				( max(val) for id in (' + @cols + ')) pv'

EXEC (@sql)	
27 апр 12, 17:35    [12481655]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по выборке  [new]
varvsn
Member

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

Большое спасибо, идея понятна!
27 апр 12, 17:43    [12481710]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить