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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
VarankDA
Посетитель
Сообщения: 47
Зарегистрирован: 15 фев 2011, 12:00
Откуда: Киров, ЗАО "Красный якорь"
Контактная информация:

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

Сообщение 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
))
;
Подскажите криворукому как связать по условию?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

справа от == никаких вычисляемых выражений не может быть.
так что самое простое сделать просто фильтром эти условия на sumvidop

...
and if(exclassseg.name='+',sumvidop.yerk,sumvidop.yarn)=2013
and if(exclassseg.name='+',sumvidop.mes,sumvidop.mesn)=5
....
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

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