Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2010, 18:24   #1
Машуля
Пользователь
 
Аватар для Машуля
 
Регистрация: 03.01.2008
Сообщений: 17
Радость Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005)

Здравствуйте!

У меня есть таблица raschets такого вида:

pps___sem__itog
7_________5,1
8_________8,7
1_________8,2
1_________8,2
2_________1
2_________3

Делаю такой запрос:
Код:
Select pps,
SUM(CASE sem WHEN '1о' THEN itog ELSE 0 END) '1о',
SUM(CASE sem WHEN '1з' THEN itog ELSE 0 END) '1з',
SUM(CASE sem WHEN '2о' THEN itog ELSE 0 END) '2о',
SUM(CASE sem WHEN '2з' THEN itog ELSE 0 END) '2з',
SUM(CASE sem WHEN '2' THEN itog ELSE 0 END) '2'
FROM raschets
GROUP BY pps
Получается некое подобие сводной таблицы - 4 записи.


Но мне нужно добиться этого же через PIVOT. Делаю так:
Код:
SELECT pps,[1о],[1з],[2],[2о],[2з]
FROM raschets
PIVOT
(SUM(itog)
FOR sem
IN ([1о],[1з],[2],[2о],[2з])
) AS pvt
ORDER BY pps
Получается 6 записей как и в исходной таблице.

Как переделать второй запрос чтобы получить результат как в первом?
Изображения
Тип файла: jpg kak_nado.jpg (7.5 Кб, 99 просмотров)
Тип файла: jpg kak_ne_nado.jpg (14.5 Кб, 95 просмотров)
Машуля вне форума Ответить с цитированием
Старый 06.05.2010, 18:48   #2
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

Вообще, на первый взгляд, вроде бы все верно... И в обоих случаях Вы должны получить один и тот же результат с четырьмя записями.

Заметил такую вещь: на изображениях первое поле выводится как pps_kod, тогда как в результате запросов оно должно выводится как pps. Чем можете объяснить эту разницу? Возможно, что это не существенно, но тем не менее …
edgy вне форума Ответить с цитированием
Старый 06.05.2010, 20:34   #3
Машуля
Пользователь
 
Аватар для Машуля
 
Регистрация: 03.01.2008
Сообщений: 17
По умолчанию

Цитата:
Сообщение от edgy Посмотреть сообщение
Вообще, на первый взгляд, вроде бы все верно... И в обоих случаях Вы должны получить один и тот же результат с четырьмя записями.

Заметил такую вещь: на изображениях первое поле выводится как pps_kod, тогда как в результате запросов оно должно выводится как pps. Чем можете объяснить эту разницу? Возможно, что это не существенно, но тем не менее …
Вот и я думаю, что результат должен быть одинаков, причем делала по примеру из учебника точь-в-точь.

pps_kod и pps - одно и то же, просто для удобочитаемости кода изменила название поля.
Машуля вне форума Ответить с цитированием
Старый 06.05.2010, 20:54   #4
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

Цитата:
Сообщение от Машуля Посмотреть сообщение
Вот и я думаю, что результат должен быть одинаков ...
Проверил у себя на тех же исходных данных. Как и ожидал, оба запроса вернули по 4 строки.

По-моему, Вы что-то утаиваете от нас
edgy вне форума Ответить с цитированием
Старый 06.05.2010, 21:09   #5
Машуля
Пользователь
 
Аватар для Машуля
 
Регистрация: 03.01.2008
Сообщений: 17
По умолчанию

Цитата:
Сообщение от edgy Посмотреть сообщение
Проверил у себя на тех же исходных данных. Как и ожидал, оба запроса вернули по 4 строки.

По-моему, Вы что-то утаиваете от нас
Признаюсь, согрешила немного. В таблице raschets у меня были еще поля, я почему-то подумала что они не имеют значения. Как оказалось, в предложении FROM нужно писать подзапрос:
Код:
SELECT pps,[1о],[1з],[2],[2о],[2з]
FROM (SELECT pps,sem,itog from raschets)x
PIVOT
(SUM(itog)
FOR sem
IN ([1о],[1з],[2],[2о],[2з])
) AS pvt
ORDER BY pps
Моя тяга к упрощению когда-нибудь доведет меня.

Спасибо Edgy что в очередной раз меня выручаете!
Машуля вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с установкой MS SQL Server 2005 BloodyRose Софт 2 19.04.2010 19:56
MS SQL 2005 Server регистрозависимым Cawboy БД в Delphi 0 26.03.2010 15:45
Создание базы в MS SQL Server 2005 badfilin SQL, базы данных 2 27.02.2009 07:50
Вставка БД с SQL server 2005 фЁдОр SQL, базы данных 17 20.11.2007 17:15