Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Odin Member Откуда: Сообщений: 173 |
Как задать (если можно) CASE или IF после WHERE. Т.е. в зависимости от какой-то переменной нужно выбирать по двум (пока) разным условиям, одно и тоже. Собственно нужно что-то типа:
SQL Server 2000 |
||
24 дек 03, 11:04 [471899] Ответить | Цитировать Сообщить модератору |
tpg Member Откуда: Novosibirsk Сообщений: 23902 |
А по четче пример можно привести, с более менее понятными значениями условий? |
24 дек 03, 11:06 [471909] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
|
||
24 дек 03, 11:08 [471916] Ответить | Цитировать Сообщить модератору |
JibSkeart Member Откуда: Из далекой галактики Сообщений: 19870 |
а нельзя ли воспользоватся просто IF ???
if @myvar = 1 select с первым условием if @myvar = 2 select со вторым условием ??? ____ ![]() |
24 дек 03, 11:09 [471917] Ответить | Цитировать Сообщить модератору |
Berg Member Откуда: Кр-ск Сообщений: 3480 |
А так не покатит?
|
||
24 дек 03, 11:25 [471962] Ответить | Цитировать Сообщить модератору |
Berg Member Откуда: Кр-ск Сообщений: 3480 |
А вообще tpg прав. Наверняка, можно записать ваше условие достаточно красиво, если писать не для общего случая, а для конкретных условий 1 и 2. |
24 дек 03, 11:27 [471966] Ответить | Цитировать Сообщить модератору |
White Lily Member Откуда: Сообщений: 28 |
То, что написал Berg еще и работать будет быстрее, чем 'CASE'. |
24 дек 03, 12:33 [472114] Ответить | Цитировать Сообщить модератору |
tpg Member Откуда: Novosibirsk Сообщений: 23902 |
А то, что написал JibSkeart, наверное, ещё быстрее будет. |
24 дек 03, 12:37 [472124] Ответить | Цитировать Сообщить модератору |
White Lily Member Откуда: Сообщений: 28 |
2tpg
Не факт, не факт... Да и с if любители компактного кода 'идут лесом'... |
24 дек 03, 12:53 [472164] Ответить | Цитировать Сообщить модератору |
tpg Member Откуда: Novosibirsk Сообщений: 23902 |
Я же написал - наверное... |
24 дек 03, 12:55 [472167] Ответить | Цитировать Сообщить модератору |
Oleg_Martynov Member Откуда: Бокситогорск, Лен. обл. Сообщений: 890 |
А разве CASE ... WHEN в WHERE - это не тоже самое, что
Зачем логическом выражении CASE использовать? |
||
24 дек 03, 12:58 [472170] Ответить | Цитировать Сообщить модератору |
tpg Member Откуда: Novosibirsk Сообщений: 23902 |
Зачем логическом выражении CASE использовать?
Ну, хочет человек - звучание слова, может, сильно подравилось ![]() |
24 дек 03, 13:01 [472174] Ответить | Цитировать Сообщить модератору |
AlexNsk Member Откуда: Новосибирск Сообщений: 61 |
Можно так:
|
||
24 дек 03, 14:27 [472399] Ответить | Цитировать Сообщить модератору |
Между сообщениями интервал более 1 года. |
Василиус Member Откуда: Москва Сообщений: 39 |
Использую данную конструкцию, по пойму, почему второе условие не отрабатывает и выводится "Жалоба". Что делаю не так? declare @type nvarchar(128) declare @type1 nvarchar(128) declare @type2 nvarchar(128) declare @type3 nvarchar(128) declare @type4 nvarchar(128) set @type='' set @type1='Заявления' set @type2='Карточки' set @type3='Вопрос' set @type4='Книга' declare @t table (f_num int identity(1,1), f_name varchar(128)) insert @t select 'Заявления' insert @t select 'Заявления' insert @t select 'Карточки' insert @t select 'Карточки' insert @t select 'Книга' insert @t select 'Вопрос' insert @t select 'Вопрос' insert @t select 'Книга' insert @t select 'Книга' insert @t select 'Жалоба' select * from @t where ((@type is not null) and (f_name like '%'+@type+'%')) or ((@type is null) and (f_name like '%'+@type1+'%' or f_name like '%'+@type2+'%' or f_name like '%'+@type3+'%' or f_name like '%'+@type4+'%')) К сообщению приложен файл. Размер - 32Kb |
||
8 июн 17, 11:39 [20549425] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
IF 'dsfdsf' like '%%' PRINT 'Васо не шарит!' |
8 июн 17, 11:47 [20549470] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
IF 1=1 OR 1!=1 PRINT 'Самое время изучить ''OR''' |
8 июн 17, 11:50 [20549485] Ответить | Цитировать Сообщить модератору |
Василиус Member Откуда: Москва Сообщений: 39 |
Если бы все шарили, форум был не нужен) Условие задачи: 1) если задан @type, то выводить только @type - работает 2) выводить всё, что задано в @type1,2,3,4 если не задан @type - не шарит |
||
8 июн 17, 11:54 [20549507] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
2) выводить всё, что задано в @type1,2,3,4 если [b]не задан @type[/b] - не шарит Ну так не задавай. ;-) |
8 июн 17, 12:04 [20549558] Ответить | Цитировать Сообщить модератору |
Василиус Member Откуда: Москва Сообщений: 39 |
Изучил как мог) Первое условие-то работает! ;) К сообщению приложен файл. Размер - 42Kb |
||
8 июн 17, 12:14 [20549591] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9646 |
|
||
8 июн 17, 12:15 [20549598] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
![]() Василиус, наверно, пришёл к нам из крутого Oracle, а в Oracle что NULL, что '' - всё едино... |
||
8 июн 17, 12:18 [20549622] Ответить | Цитировать Сообщить модератору |
Руслан Дамирович Member Откуда: Резиновая нерезиновая Сообщений: 940 |
Это "синдром ораклиста". |
||
8 июн 17, 12:20 [20549632] Ответить | Цитировать Сообщить модератору |
Василиус Member Откуда: Москва Сообщений: 39 |
Эх, снова всё самому делать надо)) Так работает, но может что-то стоит улучшить? declare @type nvarchar(128) declare @type1 nvarchar(128) declare @type2 nvarchar(128) declare @type3 nvarchar(128) declare @type4 nvarchar(128) set @type='' set @type1='Заявления' set @type2='Карточки' set @type3='Вопрос' set @type4='Книга' declare @t table (f_num int identity(1,1), f_name varchar(128)) insert @t select 'Заявления' insert @t select 'Заявления' insert @t select 'Карточки' insert @t select 'Карточки' insert @t select 'Книга' insert @t select 'Вопрос' insert @t select 'Вопрос' insert @t select 'Книга' insert @t select 'Книга' insert @t select 'Жалоба' select * from @t where ((@type = isnull(nullif(@type,''),1)) and (f_name like '%'+@type+'%')) or ((@type <> isnull(nullif(@type,''),1)) and (f_name like '%'+@type1+'%' or f_name like '%'+@type2+'%' or f_name like '%'+@type3+'%' or f_name like '%'+@type4+'%')) К сообщению приложен файл. Размер - 33Kb |
||||
8 июн 17, 12:44 [20549758] Ответить | Цитировать Сообщить модератору |
facepalm
Guest |
*facepalm* set @type= NULL |
8 июн 17, 12:50 [20549779] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9646 |
|
||
8 июн 17, 13:13 [20549894] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |