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

Откуда:
Сообщений: 536
День добрый!
Не совсем допонимаю как построить оптимальный запрос, возможно ли использовать пивот для такой задачи?
Есть таблица типа:
Create table #t ([Имя] nvarchar(50),[Месяц] nvarchar(50), [Яблоки] int,[Груши] int)

insert into #t
select N'Вася', N'Январь', 10,100 union
select N'Вася', N'Февраль', 20,200 union
select N'Вася', N'Март', 30,300 union
select N'Жора', N'Январь', 5,50 union
select N'Жора', N'Февраль', 6,60 union
select N'Жора', N'Март', 7,70 union
select N'Вася', N'Март', 40,400 union
select N'Жора', N'Февраль', 8,80


Нужно получить таблицу такого вида:
ИмяЯнварь-ЯблокиЯнварь-ГрушиФевраль-ЯблокиФевраль-Груши Март-Яблоки Март-Груши
Вася101002020070700
Жора55014140660


Возможно ли исползовать пивот или все-таки джоины?

Спасибо!
19 мар 14, 19:16    [15755006]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с пивотом плз.  [new]
abrashka
Member

Откуда:
Сообщений: 536
Таким образом можно получить яблоки отдельно, либо груши отдельно, но как получить данные в одной таблице без создания двух отдельных и джоина между ними? Это возможно?
select *
from 
(
    select [Имя] ,[Месяц], [Яблоки]
    from #t
) x
pivot
(
    sum([Яблоки]) 
    for [Месяц] in ([Январь],[Февраль],[Март])
) p
19 мар 14, 19:34    [15755116]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с пивотом плз.  [new]
_human
Member

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

declare @t table ([Имя] nvarchar(50),[Месяц] nvarchar(50), [Яблоки] int,[Груши] int)

insert into @t
select N'Вася', N'Январь', 10,100 union
select N'Вася', N'Февраль', 20,200 union
select N'Вася', N'Март', 30,300 union
select N'Жора', N'Январь', 5,50 union
select N'Жора', N'Февраль', 6,60 union
select N'Жора', N'Март', 7,70 union
select N'Вася', N'Март', 40,400 union
select N'Жора', N'Февраль', 8,80

select p.*
from
(select u.[Имя], u.[Месяц]+'-'+u.fr as x, u.val
from @t t
unpivot (val for fr in ([Яблоки],[Груши])) as u
) s
pivot (sum(s.val) for s.x
in ([Январь-Яблоки], [Январь-Груши], [Февраль-Яблоки],
[Февраль-Груши], [Март-Яблоки], [Март-Груши])) as p
19 мар 14, 19:49    [15755184]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с пивотом плз.  [new]
abrashka
Member

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

Спасибо огромное, именно то, что нужно!
19 мар 14, 19:55    [15755217]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с пивотом плз.  [new]
Lily V.
Member

Откуда: Магнитогорск
Сообщений: 92
автор
in ([Январь],[Февраль],[Март])

Скажите, всегда надо перечислять вручную этот список столбцов? Если их набор заранее неизвестен, возможно ли динамически формировать столбцы из таблицы?
27 мар 14, 06:36    [15792579]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с пивотом плз.  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Lily V.
автор
in ([Январь],[Февраль],[Март])

Скажите, всегда надо перечислять вручную этот список столбцов? Если их набор заранее неизвестен, возможно ли динамически формировать столбцы из таблицы?
Почему нет?
27 мар 14, 06:57    [15792595]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с пивотом плз.  [new]
Lily V.
Member

Откуда: Магнитогорск
Сообщений: 92
Не нашла, как это сделать. Можно какой-то пример?
27 мар 14, 07:39    [15792630]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с пивотом плз.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Lily V., вот он - пример
27 мар 14, 08:25    [15792678]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с пивотом плз.  [new]
Lily V.
Member

Откуда: Магнитогорск
Сообщений: 92
а, ну только динамическим запросом. Спасибо
27 мар 14, 10:29    [15793109]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с пивотом плз.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Lily V.
Скажите, всегда надо перечислять вручную этот список столбцов? Если их набор заранее неизвестен, возможно ли динамически формировать столбцы из таблицы?

Lily V.
а, ну только динамическим запросом. Спасибо

а как еще динамически можно формировать столбцы из таблицы, кроме как динамическим запросом? ;)
27 мар 14, 11:26    [15793481]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с пивотом плз.  [new]
Lily V.
Member

Откуда: Магнитогорск
Сообщений: 92
автор
а как еще динамически можно формировать столбцы из таблицы, кроме как динамическим запросом? ;)

Именно это я и спросила. Что за странные вопросы. Спасибо, уже все понятно
28 мар 14, 06:33    [15798528]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить