Страница 1 из 1

"Where " по условию

Добавлено: 29 июл 2013, 17:55
VarankDA
Классификатор видов оплат имеет привязку ко внешней классификации.
Исходя их привязанного условия выбрать sumvidop месяц "в котором" либо "за который "
Примерно так:
select
klvidopl.vidoplp,
exclassseg.name,
sumvidop.summa
from
klvidopl,exclassseg,exclassval,exclassname,
sumvidop,
lschet
where
((
15010 == exclassname.wtable
and 'В форме 4 учитывать по месяцу ЗА который начисленно' ==exclassname.name
and EXCLASSNAME.CLASSCODE==EXCLASSVAL.CLASSCODE
and 15010==EXCLASSVAL.WTABLE
and KLVIDOPL.nrec==EXCLASSVAL.CREC
and Exclassval.CClassSeg==EXCLASSSEG.nrec
and lschet.nrec == sumvidop.clsch
! if(exclassseg.name='+',
! 2013==sumvidop.yeark and 5==sumvidop.mes,
! 2013 == sumvidop.yearn and 5 == sumvidop.mesn)
and 2013 == if(exclassseg.name='+',sumvidop.yerk,sumvidop.yarn)
and 5 == if(exclassseg.name='+',sumvidop.mes,sumvidop.mesn)
and klvidopl.vidopl == sumvidop.vidopl
))
;
Подскажите криворукому как связать по условию?

Re: "Where " по условию

Добавлено: 30 июл 2013, 01:47
Den
справа от == никаких вычисляемых выражений не может быть.
так что самое простое сделать просто фильтром эти условия на sumvidop

...
and if(exclassseg.name='+',sumvidop.yerk,sumvidop.yarn)=2013
and if(exclassseg.name='+',sumvidop.mes,sumvidop.mesn)=5
....

Re: "Where " по условию

Добавлено: 30 июл 2013, 10:41
edward_K
1. можно написать в (( )) дополнительное условие в and ( ..) и с одним = - так читабельней - раньше были проблемы с описанием этого внутри (()), но теперь пашет.
2. У вас поля с годом неправильно названы, а мож еще где.
3. В вашем случае лучше отдельно отобрать там где + и там где нет или - - запросы будут работать раз в 5 быстрее. Если это ваш код, то можно баундсы подымать в зависимости от вида оплат.