Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как работает разворачивание данных? стандарт SQL 
V
    Опции темы
Kolovorot
Дата 20.1.2011, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 12.1.2009

Репутация: 1
Всего: 3



Есть таблица:
Код

orderid     orderdate   empid       custid qty
----------- ----------  ----------- ------ -----------
10001       2007-12-24   2           A      12
10005       2007-12-24   1           B      20
10006       2008-01-18   1           C      14
20001       2008-02-12   2           B      12
20002       2009-02-16   1           C      20
30001       2007-08-02   3           A      10
30003       2009-04-18   2           B      15
30004       2007-04-18   3           C      22
30007       2009-09-07   3           D      30
40001       2008-01-09   2           A      40
40005       2009-02-12   3           A      10


Выполняю разворачивание(раскрытие) столбца custid. Чтобы понять принцип работы разворачивания добавляю для каждого custid дополнительный столбец "custid+1", в котором считается количество прохождения по данному custid в каждой строке, для которых есть значение qty - 1 и нет - 100:
Код

SELECT empid,
 SUM(CASE WHEN custid = 'A' THEN qty END) AS A,
 SUM(CASE WHEN custid = 'A' THEN 1 ELSE 100 END) AS A1,
 SUM(CASE WHEN custid = 'B' THEN qty END) AS B,
 SUM(CASE WHEN custid = 'B' THEN 1 ELSE 100 END) AS B1,
 SUM(CASE WHEN custid = 'C' THEN qty END) AS C,
  SUM(CASE WHEN custid = 'C' THEN 1 ELSE 100 END) AS C1,
 SUM(CASE WHEN custid = 'D' THEN qty END) AS D,
 SUM(CASE WHEN custid = 'D' THEN 1 ELSE 100 END) AS D1
FROM dbo.Orders
GROUP BY empid;


Получаю результат:
Код

empid       A              A1              B              B1           C              C1            D           D1          
----------- ----------- ----------- ----------- ----------- ----------- ----------- ---------- --------
1              NULL          300           20            201            34          102         NULL        300        
2              52             202            27            202          NULL        400         NULL        400       
3              20             202           NULL          400           22          301           30          301  


Получаю в первой строке три прохода для каждого custid. А во второй и третьей по четыре прохода. Почему так происходит? И вообще как работает разворачивание?

зы: Извините за корявость.

Это сообщение отредактировал(а) Kolovorot - 20.1.2011, 20:30
--------------------
Никогда еще истина не повисала на руке безусловного. Фридрих Ницше. Так говорил Заратустра
PM MAIL   Вверх
Gluttton
Дата 20.1.2011, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Kolovorot, 
Цитата(Kolovorot @  20.1.2011,  19:59 Найти цитируемый пост)
И вообще как работает развертывание?

Или разворачивание?
Если разворачивание и если MS SQL Server то поможет PIVOT.


--------------------
Слава Україні!
PM MAIL   Вверх
Kolovorot
Дата 20.1.2011, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 12.1.2009

Репутация: 1
Всего: 3



Да-да разворачивание(сейчас исправлю). А про PIVOT я знаю. Просто хочу понять принцип работы разворачивания с помощью стандартного SQL.

Это сообщение отредактировал(а) Kolovorot - 20.1.2011, 20:29
--------------------
Никогда еще истина не повисала на руке безусловного. Фридрих Ницше. Так говорил Заратустра
PM MAIL   Вверх
Kolovorot
Дата 20.1.2011, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 12.1.2009

Репутация: 1
Всего: 3



Всё разобрался. Количество прохождений по каждому custid равно количеству строк для каждого сотрудника(empid).
--------------------
Никогда еще истина не повисала на руке безусловного. Фридрих Ницше. Так говорил Заратустра
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0464 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.