Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сложные условия во where в запросе процедуры  [new]
roma1975
Member

Откуда:
Сообщений: 251
Добрый день.

Пробую сделать в запросе сложные фильтры во where в запросе процедуры

   FROM [KTMOTIS].[dbo].[ALARMS_KUZET] t1 where 
   [InsertTime] between @P2 and @P3
   and Dispt1=(case when @P4='1' then @P5 else Dispt1 end)


and Dispt1=(case when @P4='1' then @P5 else Dispt1 end)
-такой фильтр проходит, а как сделать что-то подобное
для таких условий в запросе:

if trim(ComboBox8.Text)='И незавершённые тр.' then
s:='(Vremopch>0 or Vremopoz is null) ';
if trim(ComboBox8.Text)='Только опоздания' then
s:='Vremopch>0 and Vremopoz is not null ';
if trim(ComboBox8.Text)='Только опоздания свыше 4 минут' then
s:='Vremopch >240';


@P4 пусть будет здесь значение ComboBox8.Text

и для таких условий
if ansiuppercase(trim(ComboBox2.Text))='МГОР АЛМАТЫ' then
s:='CALLSIGN_REAL like ''АРАЛ%'' or CALLSIGN_REAL  like ''МЕРКЕ%'' or CALLSIGN_REAL  like ''УЛАН%'''
else
if ansiuppercase(trim(ComboBox2.Text))='РЕГИОНЫ' then
s:='CALLSIGN_REAL not like ''АРАЛ%'' and CALLSIGN_REAL not like ''МЕРКЕ%'' and CALLSIGN_REAL not like ''УЛАН%'''
else
s:='CALLSIGN_REAL like '''+trim(ComboBox2.Text)+'%''' ;


@P4 пусть будет здесь значение ComboBox2.Text


и для таких условий

s:='Vremdoobj is not null and Vremdoobj<>'''''


@P4 пусть будет здесь значение '1'
2 ноя 16, 08:12    [19848993]     Ответить | Цитировать Сообщить модератору
 Re: Сложные условия во where в запросе процедуры  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20974
roma1975
для таких условий в запросе:

if trim(ComboBox8.Text)='И незавершённые тр.' then
s:='(Vremopch>0 or Vremopoz is null) ';
if trim(ComboBox8.Text)='Только опоздания' then
s:='Vremopch>0 and Vremopoz is not null ';
if trim(ComboBox8.Text)='Только опоздания свыше 4 минут' then
s:='Vremopch >240';

CASE
WHEN TRIM(ComboBox8.Text)='И незавершённые тр.' AND (Vremopch>0 OR Vremopoz IS NULL) THEN TRUE
WHEN TRIM(ComboBox8.Text)='Только опоздания' AND Vremopch>0 AND Vremopoz IS NOT NULL THEN TRUE
WHEN TRIM(ComboBox8.Text)='Только опоздания свыше 4 минут' AND Vremopch>240 THEN TRUE
ELSE FALSE
END

?
2 ноя 16, 08:18    [19848999]     Ответить | Цитировать Сообщить модератору
 Re: Сложные условия во where в запросе процедуры  [new]
roma1975
Member

Откуда:
Сообщений: 251
Так у тебя оно ни с каким полем условие не связано и выдаёт ошибку использования
твоего условия
and
(CASE
WHEN 'И незавершённые тр.'='И незавершённые тр.' AND (Vremopch>0 OR Vremopoz IS NULL)
ELSE FALSE
END)

-это неправильно ошибка
2 ноя 16, 08:26    [19849007]     Ответить | Цитировать Сообщить модератору
 Re: Сложные условия во where в запросе процедуры  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20974
Тебе дали идею, а не запрос - уж не поленись, доведи её до рабочего кода.
roma1975
у тебя оно ни с каким полем условие не связано

Кто тебе рассказал про обязательность "связи с полем" (что это вообще такое, кстати)?
2 ноя 16, 08:30    [19849015]     Ответить | Цитировать Сообщить модератору
 Re: Сложные условия во where в запросе процедуры  [new]
roma1975
Member

Откуда:
Сообщений: 251
Ну вообщем вот это условие которое я написал переделав твоё не работает выдаётся ошибка.
Здесь в запросе я делаю фильтр если переменная в процедуре такая(скажем '1' и может дополнительная
переменная принимать условия например 'И незавершённые тр.') то на поле соответствующее поле может
налагаться фильтр или в зависимости от условий не налагаться.
2 ноя 16, 09:02    [19849066]     Ответить | Цитировать Сообщить модератору
 Re: Сложные условия во where в запросе процедуры  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20974
roma1975
Ну вообщем вот это условие которое я написал переделав твоё не работает выдаётся ошибка.
Которую нам предлагается угадать?

roma1975
на поле соответствующее поле может налагаться фильтр или в зависимости от условий не налагаться.

WHERE (field = @value or @flag = 'DisableThisCondition')
2 ноя 16, 09:42    [19849189]     Ответить | Цитировать Сообщить модератору
 Re: Сложные условия во where в запросе процедуры  [new]
aleks2
Guest
Akina
roma1975
для таких условий в запросе:

if trim(ComboBox8.Text)='И незавершённые тр.' then
s:='(Vremopch>0 or Vremopoz is null) ';
if trim(ComboBox8.Text)='Только опоздания' then
s:='Vremopch>0 and Vremopoz is not null ';
if trim(ComboBox8.Text)='Только опоздания свыше 4 минут' then
s:='Vremopch >240';

CASE
WHEN TRIM(ComboBox8.Text)='И незавершённые тр.' AND (Vremopch>0 OR Vremopoz IS NULL) THEN TRUE
WHEN TRIM(ComboBox8.Text)='Только опоздания' AND Vremopch>0 AND Vremopoz IS NOT NULL THEN TRUE
WHEN TRIM(ComboBox8.Text)='Только опоздания свыше 4 минут' AND Vremopch>240 THEN TRUE
ELSE FALSE
END

?


Зачем ты учишь чайника плохому?
1. Клиент (на сервере ComboBox8.Text нема) преобразует
if trim(ComboBox8.Text)='И незавершённые тр.' then
в значения переменных
@MinVremopch = 0
@MaxVremopch = 111111111111111
@Vremopoz = null

2. Сервер выполняет запрос с этими параметрами
from ...
where ( @MinVremopch is null or @MinVremopch < Vremopch)
   and ( @MaxVremopch is null or @MaxVremopch > Vremopch)
   and ( @Vremopoz is null or @Vremopoz = Vremopoz) 


3. Задача чайника: определить потребный набор переменных.

ЗЫ. Хотя понятно, что не в коня корм.
2 ноя 16, 12:55    [19850346]     Ответить | Цитировать Сообщить модератору
 Re: Сложные условия во where в запросе процедуры  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20974
aleks2, да понятно, что текст запроса должен сформировать клиент у себя уже окончательно, а не отсылать эту ахинею серверу. Но если ТС хочет выстрелить в ногу, кто я, чтобы мешать?
2 ноя 16, 12:59    [19850371]     Ответить | Цитировать Сообщить модератору
 Re: Сложные условия во where в запросе процедуры  [new]
roma1975
Member

Откуда:
Сообщений: 251
Да спасибо. Я часть запроса (часть фильтрации) сформировал на клиенте и передал в процедуру, можно было и весь запрос сформировать на клиенте. В процедуре выполнил этот динамический запрос, где нужно было, если нужно обработал, пронумеровал
для определённых групп записи.
4 ноя 16, 09:18    [19858168]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить