01.10.2019 16:38
karachun
 
Доброго дня!!!
Задача передать один параметр в запрос и получить одно или все МХ. Пытаюсь через case, но в секции Then должно быть одно значение, а не набор данных.
Подскажите, как правильно реализовать?
SQL код:
select *
  
from smgoods g
 where g
.storeloc in
       
(case :
             when 
1 then (select mx.id from smstorelocations mx
        else (
select mx.id from smstorelocations mx where mx.id = :a
        
end
01.10.2019 17:39
vdm
 
Если правильно понял задачу - фильтр по MX примерно такой: -1 - любое, или :a - конкретное.
Тогда зачем усложнять, чем не устраивает
SQL код:
where g.storeloc=:or :a=-
01.10.2019 17:50
karachun
 
Если все то g.storeloc <> -1 (неравно), а если одно, то чему то равно. Смена не значения, а знака, условия.
01.10.2019 18:51
karachun
 
vdm, не правильно понял. Если :a = -1, то g.storeloc <> -1, Иначе g.storeloc = :a .
01.10.2019 19:55
OlegON
 
Цитата:
karachun vdm, не правильно понял
он как раз правильно понял, это ты неправильно написал :) посмотри на первое сообщение.
По ЦО (-1) остатков быть не должно,
Цитата:
karachun :a = -1, то g.storeloc <> -1
требуешь все и из этого при -1 будет работать только правая часть условия
Цитата:
vdm :a=-1
SQL код:
where -1=-
т.е. все, а при а равном чему-то другому останется только левая часть условия, как раз то, что ты просишь и очень красиво.
02.10.2019 08:29
karachun
 
Да, действительно. Так и есть. Конец дня, усталость.
Спасибо!!!

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.