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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объединение двух таблиц с SUM 
:(
    Опции темы
Beltar
Дата 12.1.2010, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 7



Есть две таблицы:
1) Форматоры (данные об оборудовании)
id
Ряд
Номер
2) Варки (выработка на оборудовании)
id
Время начала
id Форматора
id смены
Число покрышек

Нужно получить распределение выработки по оборудованию. Делаю так:

Код

Select Форматоры.ряд, Форматоры.номер, Варки."id Смены", 
  Sum(Варки."Число покрышек") as Выработка 
from Форматоры 
Left join Варки on Форматоры.id=Варки."id Форматора"
Where Варки."Время начала" Between '2008.12.01' and '2008.12.31' 
Group by Форматоры.ряд, Форматоры.номер, Варки."id смены" 
Order by Форматоры.ряд, Форматоры.номер, Варки."id смены"


Все хорошо, но форматоры на которых нет выработки в итоговый набор не включаются.
Можно ли сделать так, чтобы выводились все форматоры, даже те для которых выработка отсутствует, т. е. "id смены" и Sum(Варки."Число покрышек") были равны NULL?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Akina
Дата 12.1.2010, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Поведение GROUP BY для значений NULL - очень штука специфичная...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 12.1.2010, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

Репутация: 53
Всего: 161



Цитата(Beltar @  12.1.2010,  15:38 Найти цитируемый пост)
Можно ли сделать так, чтобы выводились все форматоры, даже те для которых выработка отсутствует

Код

Select Форматоры.ряд, Форматоры.номер, Варки."id Смены", 
  Sum(Варки."Число покрышек") as Выработка 
from Форматоры 
Left join Варки on Форматоры.id=Варки."id Форматора"
  and Варки."Время начала" Between '2008.12.01' and '2008.12.31' 
Group by Форматоры.ряд, Форматоры.номер, Варки."id смены" 
Order by Форматоры.ряд, Форматоры.номер, Варки."id смены"

?


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Beltar
Дата 14.1.2010, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 7



Цитата

Поведение GROUP BY для значений NULL - очень штука специфичная...


Т. е. мой запрос правильный для некоторых БД? У меня MS SQL-Server 2000.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Zloxa
Дата 14.1.2010, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

Репутация: 53
Всего: 161



Цитата(Beltar @  14.1.2010,  18:06 Найти цитируемый пост)
Т. е. мой запрос правильный для некоторых БД?

нет


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Kesh
Дата 14.1.2010, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



Проверил на MySQL - работает вроде как правильно...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Zloxa
Дата 15.1.2010, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

Репутация: 53
Всего: 161



Цитата(Kesh @  14.1.2010,  23:46 Найти цитируемый пост)
правильно

что именно правильно?
Можешь показать что именно ты проверил?



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Kesh
Дата 15.1.2010, 02:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



см. вложение...
По датам ограничивать не стал - не суть важно...

Форматор с номером 5 не имеет записей - показан как NULL
Форматор с номером 3 во второй смене имеет 01.01.10 - NULL, 02.01.10 - 3, в сумме показывает 3. Хотя такие строки с NULL вести в базе особого смысла и не вижу...

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  Image1.jpg 429,59 Kb


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Zloxa
Дата 15.1.2010, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

Репутация: 53
Всего: 161



Цитата(Kesh @  15.1.2010,  02:35 Найти цитируемый пост)
не суть важно...

Как раз таки в том и суть.
При наличии такового ограничения в секции where, левое внешнее соединение вырождается во внутреннее и результата, ожидаемого ТС, добиться не удастса.
Посему сие ограничение надо перенести в секцию join, а если платформа такого не дозволяет, что врядли, добавить в секцию where предикат or Варки."id Форматора".




--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Kesh
Дата 16.1.2010, 03:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



Цитата(Zloxa @ 15.1.2010,  07:57)
Цитата(Kesh @  15.1.2010,  02:35 Найти цитируемый пост)
не суть важно...

Как раз таки в том и суть.
При наличии такового ограничения в секции where, левое внешнее соединение вырождается во внутреннее и результата, ожидаемого ТС, добиться не удастса.
Посему сие ограничение надо перенести в секцию join, а если платформа такого не дозволяет, что врядли, добавить в секцию where предикат or Варки."id Форматора".

Можно было бы долго рассуждать по этому поводу, а можно было бы взять и проверить... см. аттач. 

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  Image2.png 75,94 Kb


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Zloxa
Дата 16.1.2010, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

Репутация: 53
Всего: 161



Цитата(Kesh @  16.1.2010,  03:48 Найти цитируемый пост)
см. аттач.  

это мой запрос а не запрос ТС


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




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


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

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