IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.
Модератор: kdv
-
WWWovan
- Сообщения: 7
- Зарегистрирован: 29 сен 2005, 15:48
Сообщение
WWWovan » 13 дек 2006, 18:23
Имеется следующий запрос:
Код: Выделить всё
select cli.name, manager.name, sum(sellings.amount/opers.rate), sum(sellings.storeprice*sellings.wcount), cli.id
from clients manager
join clients cli on manager.id=cli.manager and cli.manager IN(6509,7508,86,3917)
left join opers on (cli.ID=opers.CLIENT and opers.optype=80000 and opers.POSTED="T")
join deals on opers.DEAL=deals.ID and deals.CLOSED="T" and deals.ENDDATE between "01.08.2006" and "30.08.2006 23:59:59"
join sellings on opers.id=sellings.opid
GROUP BY manager.name, cli.name, cli.id
Он выдает для выбраных ответственных менеджеров суммы по накладным для закрепленных за ними клиентов за определенный период.
Нужно доработать таким образом, что если в этот период на закрепленных клиентов накладных не было, то вместо сумм выводятся нули.
Подскажите пожалуста как это лучше реализовать.
-
WWWovan
- Сообщения: 7
- Зарегистрирован: 29 сен 2005, 15:48
Сообщение
WWWovan » 13 дек 2006, 18:59
Ой. Кажется я ошибся разделом. Переместите пожалуйста.
-
Merlin
- Динозавр IB/FB
- Сообщения: 1502
- Зарегистрирован: 27 окт 2004, 11:44
Сообщение
Merlin » 13 дек 2006, 21:00
И все сразу догагадались где у тебя накладные и где что. А реализовать это лучше при помощи left join и coalesce.
-
WWWovan
- Сообщения: 7
- Зарегистрирован: 29 сен 2005, 15:48
Сообщение
WWWovan » 14 дек 2006, 15:16
Merlin писал(а):И все сразу догагадались где у тебя накладные и где что. А реализовать это лучше при помощи left join и coalesce.
Прошу прощения, что сразу не расшифровал.
Информация по накладным находится в opers,
deals - сделки
sellings - позиции в накладной.
clients manager - менеджеры.
clients cli - клиенты менеджеров.
-
Dimitry Sibiryakov
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Сообщение
Dimitry Sibiryakov » 14 дек 2006, 15:42
Тебе же уже сказали: используй левые джоины. Правда, я был неправ: первый джоин может быть нормальным, а вот остальные точно должны быть левыми. По крайней мере последний.
В-общем, делай их левыми начиная с конца пока не получишь требуемое.
-
WWWovan
- Сообщения: 7
- Зарегистрирован: 29 сен 2005, 15:48
Сообщение
WWWovan » 14 дек 2006, 17:52
Спасибо за участие и coalesce.
Помогли сформулировать на sql.ru
-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 14 дек 2006, 18:42
WWWovan писал(а):Спасибо за участие и coalesce.
Ты кросс-постами не занимайся. Поверь, тут и там одни и те же люди ходють
