Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20974 |
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] Ответить | Цитировать Сообщить модератору |
roma1975 Member Откуда: Сообщений: 251 |
Так у тебя оно ни с каким полем условие не связано и выдаёт ошибку использования твоего условия and (CASE WHEN 'И незавершённые тр.'='И незавершённые тр.' AND (Vremopch>0 OR Vremopoz IS NULL) ELSE FALSE END) -это неправильно ошибка |
2 ноя 16, 08:26 [19849007] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20974 |
Тебе дали идею, а не запрос - уж не поленись, доведи её до рабочего кода.
Кто тебе рассказал про обязательность "связи с полем" (что это вообще такое, кстати)? |
||
2 ноя 16, 08:30 [19849015] Ответить | Цитировать Сообщить модератору |
roma1975 Member Откуда: Сообщений: 251 |
Ну вообщем вот это условие которое я написал переделав твоё не работает выдаётся ошибка. Здесь в запросе я делаю фильтр если переменная в процедуре такая(скажем '1' и может дополнительная переменная принимать условия например 'И незавершённые тр.') то на поле соответствующее поле может налагаться фильтр или в зависимости от условий не налагаться. |
2 ноя 16, 09:02 [19849066] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20974 |
WHERE (field = @value or @flag = 'DisableThisCondition') |
||||
2 ноя 16, 09:42 [19849189] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Зачем ты учишь чайника плохому? 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] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20974 |
aleks2, да понятно, что текст запроса должен сформировать клиент у себя уже окончательно, а не отсылать эту ахинею серверу. Но если ТС хочет выстрелить в ногу, кто я, чтобы мешать? |
2 ноя 16, 12:59 [19850371] Ответить | Цитировать Сообщить модератору |
roma1975 Member Откуда: Сообщений: 251 |
Да спасибо. Я часть запроса (часть фильтрации) сформировал на клиенте и передал в процедуру, можно было и весь запрос сформировать на клиенте. В процедуре выполнил этот динамический запрос, где нужно было, если нужно обработал, пронумеровал для определённых групп записи. |
4 ноя 16, 09:18 [19858168] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |