Запрос с расчетом сальдо и условие

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Lars
Сообщения: 86
Зарегистрирован: 21 дек 2005, 16:34

Запрос с расчетом сальдо и условие

Сообщение Lars » 06 июн 2006, 03:52

CHARGE- начисление и остатки за прош. месяц.;
PAYMENT-оплата

SELECT SNAME,
(
(SELECT СуммаСальдо FROM CHARGE ... ) --Сальдо на начало месяца
+
(SELECT SUM(СуммаНачисл) FROM CHARGE ... ) --Общ. начисл. за месяц
-
(SELECT SUM(СуммаОплаты) FROM PAYMENT...)--Общ. оплата за месяц
) DUTY_SUM
Выдает(записей ок. 4500):
Иванов | 15600.00
Петров | 1500.00
Сидоро | 1600.00

Надо вывести только те, у которых сальдо на конец > 1500 и т.п., т.е. долги в каких-то пределах.

Вариант с
" WHERE DUTY_SUM >1500 "
не работает. Почему?
Как возможно построить такой запрос? ХП?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 06 июн 2006, 08:02

Да, ХП. Будь выражение попроще можно было бы обойтись HAVING, но подзапрос...

Lars
Сообщения: 86
Зарегистрирован: 21 дек 2005, 16:34

Сообщение Lars » 06 июн 2006, 08:13

Dimitry Sibiryakov писал(а):Да, ХП. Будь выражение попроще можно было бы обойтись HAVING, но подзапрос...
Почему PAY_SUM не видит в WHERE?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 06 июн 2006, 08:17

Потому что у тебя нет столбца PAY_SUM.

Lars
Сообщения: 86
Зарегистрирован: 21 дек 2005, 16:34

Сообщение Lars » 06 июн 2006, 08:21

Dimitry Sibiryakov писал(а):Потому что у тебя нет столбца PAY_SUM.
доходчиво

Lars
Сообщения: 86
Зарегистрирован: 21 дек 2005, 16:34

Сообщение Lars » 06 июн 2006, 08:59

В ХП плохо, что не получить РекордКоунт, соответ. процесс отобразить плохо удасться

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 06 июн 2006, 09:31

Lars писал(а):В ХП плохо, что не получить РекордКоунт, соответ. процесс отобразить плохо удасться
С чего ты взял? Набор, полученный из ХП, ничем не отличается от полученного через прямой SELECT.

Lars
Сообщения: 86
Зарегистрирован: 21 дек 2005, 16:34

Сообщение Lars » 06 июн 2006, 19:04

Cybermax писал(а):
Lars писал(а):В ХП плохо, что не получить РекордКоунт, соответ. процесс отобразить плохо удасться
С чего ты взял? Набор, полученный из ХП, ничем не отличается от полученного через прямой SELECT.
У компонента Fibplus StorProc нет метода FetchAll, и рекорд каунт показывает 1!

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 06 июн 2006, 21:00

У компонента Fibplus StorProc нет метода FetchAll, и рекорд каунт показывает 1!
ты значит, писатель, а не читатель, так?
с чего ты взял, что СЕЛЕКТИВНУЮ процедуру надо вызывать в storedproc? И с чего ты взял, что в нем FetchAll будет работать? :)
Джефф всех надул... В общем, StoredProc с датасетом не имеет ничего общего (если смотреть в код). Используй обычный
select * from procedure в IBQuery, IBSQL, IBDataSet...

специально же есть статья, в которой все написано:
http://www.ibase.ru/devinfo/ibx.htm
докрути до IBStoredProc.

Lars
Сообщения: 86
Зарегистрирован: 21 дек 2005, 16:34

Сообщение Lars » 06 июн 2006, 22:21

kdv писал(а):
У компонента Fibplus StorProc нет метода FetchAll, и рекорд каунт показывает 1!
ты значит, писатель, а не читатель, так?
с чего ты взял, что СЕЛЕКТИВНУЮ процедуру надо вызывать в storedproc? И с чего ты взял, что в нем FetchAll будет работать? :)
Джефф всех надул... В общем, StoredProc с датасетом не имеет ничего общего (если смотреть в код). Используй обычный
select * from procedure в IBQuery, IBSQL, IBDataSet...

специально же есть статья, в которой все написано:
http://www.ibase.ru/devinfo/ibx.htm
докрути до IBStoredProc.
Ладно уж вам, и читаю тоже...

Ответить