Запутался в какой-то ерунде.
Есть мной же написанные огромные процедуры,
в основном много уровневый запросы
Появилась необходимость сделать в них банальный
переключатель по содержанию некого поля
Добавил еще параметр в процедуры
lwy in integer
Рулить нужно по полю таблицы acgr
docnum есть ли единица в первом символе или ее там нет,
или неважно.
Простые запросы в эту таблицу
типа select count(*) from aggr where trim(substr(docnum,1,1)='1') , ... trim(substr(docnum,1,1)!='1'
дают разное число записей, что есть верно
Теперь залезаю в процедуры и в существующем where, где есть указанная таблица
с алиасом b дописываю
and case when lwy=0 then 1 when lwy =1 and trim(substr(b.docnum,1,1))='1' then 1 case lwy =2 and trim(substr(b.docnum,1,1))!='1' then 1 end=1
Тестирую с тремя разными lwy -0,1,2 и получаю совершенно неожиданно одинаковые результаты по сумма , что не есть верно.
Заменяю case на банальные and ((lwy=0) or (lwy=1 and trim(substr(b.docnum,1,1))='1') or (lwy =2 and trim(substr(b.docnum,1,1))!='1'))
и все верно, суммы для разных lwy разные, но вроде так плохо для оптимизации.
Что неверно в случае case не понимаю, вроде это одно и тоже.
Самое поганое, не проверив результат уже 12 процедур поменял с case