Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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



Ответ
 
Опции темы
Старый 06.05.2010, 18:24   #1
Машуля
Пользователь
 
Аватар для Машуля
 
Регистрация: 03.01.2008
Сообщений: 17
Репутация: 10

icq: 5147769
skype: ermariand
Радость Запрос с 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 Кб, 14 просмотров)
Тип файла: jpg kak_ne_nado.jpg (14.5 Кб, 15 просмотров)
Машуля вне форума   Ответить с цитированием
Старый 06.05.2010, 18:48   #2
edgy
Форумчанин
 
Регистрация: 15.06.2008
Адрес: Уфа
Сообщений: 271
Репутация: 152
По умолчанию

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

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

icq: 5147769
skype: ermariand
По умолчанию

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

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

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

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

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

icq: 5147769
skype: ermariand
По умолчанию

Цитата:
Сообщение от 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 что в очередной раз меня выручаете!
Машуля вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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




15:56.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
таргетированный трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru