Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
abrashka Member Откуда: Сообщений: 517 |
День добрый! Не совсем допонимаю как построить оптимальный запрос, возможно ли использовать пивот для такой задачи? Есть таблица типа: 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 Нужно получить таблицу такого вида:
Возможно ли исползовать пивот или все-таки джоины? Спасибо! |
||||||||||||||||||||||
19 мар 14, 19:16 [15755006] Ответить | Цитировать Сообщить модератору |
abrashka Member Откуда: Сообщений: 517 |
Таким образом можно получить яблоки отдельно, либо груши отдельно, но как получить данные в одной таблице без создания двух отдельных и джоина между ними? Это возможно?select * from ( select [Имя] ,[Месяц], [Яблоки] from #t ) x pivot ( sum([Яблоки]) for [Месяц] in ([Январь],[Февраль],[Март]) ) p |
19 мар 14, 19:34 [15755116] Ответить | Цитировать Сообщить модератору |
_human Member Откуда: Сообщений: 566 |
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] Ответить | Цитировать Сообщить модератору |
abrashka Member Откуда: Сообщений: 517 |
_human, Спасибо огромное, именно то, что нужно! |
19 мар 14, 19:55 [15755217] Ответить | Цитировать Сообщить модератору |
Lily V. Member Откуда: Магнитогорск Сообщений: 92 |
Скажите, всегда надо перечислять вручную этот список столбцов? Если их набор заранее неизвестен, возможно ли динамически формировать столбцы из таблицы? |
||
27 мар 14, 06:36 [15792579] Ответить | Цитировать Сообщить модератору |
tpg Member Откуда: Novosibirsk Сообщений: 23902 |
|
||||
27 мар 14, 06:57 [15792595] Ответить | Цитировать Сообщить модератору |
Lily V. Member Откуда: Магнитогорск Сообщений: 92 |
Не нашла, как это сделать. Можно какой-то пример? |
27 мар 14, 07:39 [15792630] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
Lily V., вот он - пример |
27 мар 14, 08:25 [15792678] Ответить | Цитировать Сообщить модератору |
Lily V. Member Откуда: Магнитогорск Сообщений: 92 |
а, ну только динамическим запросом. Спасибо |
27 мар 14, 10:29 [15793109] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
а как еще динамически можно формировать столбцы из таблицы, кроме как динамическим запросом? ;) |
||||
27 мар 14, 11:26 [15793481] Ответить | Цитировать Сообщить модератору |
Lily V. Member Откуда: Магнитогорск Сообщений: 92 |
Именно это я и спросила. Что за странные вопросы. Спасибо, уже все понятно |
||
28 мар 14, 06:33 [15798528] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |