SQL-запрос для выбора столбца с выражением неагрегированного значения -и агрегатной функцией

Используемые таблицы:

1) v(date d, name c(25), desc c(50), debit n(7), credit n(7))

name in 'v' refers name in vn table

2) vn(date d, name c(25), type c(25), obal n(7))

name in 'vn' is a primary key and different names are grouped by type

ex: names abc, def, ghi belongs to type 'bank', names xyz, pqr belongs to type 'ledger',...

У меня такой запрос:

SELECT vn.type, SUM(vn.obal + IIF(v.date < sd, v.credit-v.debit, 0)) OpBal, ;
    SUM(IIF(BETWEEN(v.date, sd, ed), v.credit-v.debit, 0)) CurBal ;
    FROM v, vn WHERE v.name = vn.name GROUP BY vn.type ;
    ORDER BY vn.type HAVING OpBal + CurBal != 0

Он работает нормально, но единственная проблема заключается в том, что obal — это значение, которое вводится только один раз для каждого имени в таблице «vn», но с этим запросом для каждого расчета кредита -дебета в таблице «v» obal добавляется несколько раз и отображается под OpBal. Когда запрос изменен, как показано ниже:

SELECT vn.type, vn.obal + SUM(IIF(v.date < sd, v.credit-v.debit, 0)) OpBal, ;
    SUM(IIF(BETWEEN(v.date, sd, ed), v.credit-v.debit, 0)) CurBal ;
    FROM v, vn WHERE v.name = vn.name GROUP BY vn.type ;
    ORDER BY vn.type HAVING OpBal + CurBal != 0

он показывает сообщение об ошибке, например «Предложение Group by отсутствует или недействительно»!

СУРБД использовала MS Visual Foxpro 9. sd и ed — это переменные типа даты, используемые для целей запроса, где sd < ed.

Пожалуйста, помогите мне получить ожидаемый результат. Большое спасибо.

6
задан Ganapathy 7 July 2012 в 11:18
поделиться