Привет
Есть у меня мудрённый код. Я не могу понять, или так нельзя писать или сервер не правильно считает. В таком виде, если есть значения в колонках IDColor и UseByDate null, то результат один,
select
 Rem.iddepot,
 Rem.idcommodity,
 case :qq1
  when 1 then Rem.costprice
  else null end as f1,
 case :qq2
  when 1 then Rem.saleprice
  else null end as f2,
 case :qq3
  when 1 then Rem.usebydate
  else null end as f3,
 case :qq4
  when 1 then Rem.idcolor
  else null end as f4,
 case :qq5
  when 1 then Rem.barcode
  else null end as f5,
 case :qq6
  when 1 then Rem.param1
  else null end as f6,
 case :qq7
  when 1 then Rem.param2
  else null end as f7,
 Sum(Rem.QUANTITY)
from remainder Rem
  where IDDate<=:LIDDate
group by 1,2,3,4,5,6,7,8,9
having Sum(Rem.QUANTITY)>0

Если написать так
case :qq3
when 1 then coalesce(Rem.usebydate,current_date )
else null end as f3,
case :qq4
when 1 then coalesce(Rem.idcolor,0)
else null end as f4,

то результат верный.
Есть воспроизводимый тест.

Я замечал и не раз, что если вставить константу в качестве поля и использовать агрегат с группировкой по этой константе, то такие чудеса бывают.
Нужна помощь.
Дмитрий

Ответить