Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2010, 09:39   #1
kity
Пользователь
 
Регистрация: 25.05.2010
Сообщений: 22
По умолчанию Чем заменить функцию?

Какой функцией в microsoft sql можно заменить функцию из sql oracle decode
которая подразумевает следующее
DECODE(E,S1,R1,S2,R2,…,[def]) - Если E соответствует Si, то возвращается Ri, в противном случае - def или NULL, если умолчание не задано.
Чтобы выполнить:
max(decode( position, 1, column_name, null )) cname1
kity вне форума Ответить с цитированием
Старый 29.06.2010, 09:44   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
case e
 when s1 then r1
 when s2 then r2
 ...
end
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.06.2010, 09:49   #3
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

kity, недавно меня тоже интересовал подобный вопрос. В сети есть предложения использовать switch, только у меня с ним ничего не получилось. Я писала отдельную функцию с if(условие), которая при нахождении нужного Si выдавала Ri, иначе возвращала def. А вызывала я ее уже в SELECT.
SELECT func(...) WHERE ...
что-то вроде такого
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 29.06.2010, 10:22   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Девочки, почитайте мануалы (Тема CASE (Transact-SQL) ) по MS SQL Server
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.06.2010, 11:52   #5
kity
Пользователь
 
Регистрация: 25.05.2010
Сообщений: 22
По умолчанию

Спасибо! Все получилось

Подскажите, пожалуйста еще функцию:
конкатенация (слияние строковых значений). оператор конкатенации — две вертикальные черты (||).
Необходимо выполнить следующее:
cname1 || nvl2(cname2,','||cname2,null)
Как это же выполнить в microsoft sql???

Последний раз редактировалось Stilet; 29.06.2010 в 13:22.
kity вне форума Ответить с цитированием
Старый 29.06.2010, 12:41   #6
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Stilet, читала... то ли я тупая, то ли я тупая, но ничего не получилось у меня с этими кейсами...

kity, 'строка' + 'строка', насколько я помню
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 29.06.2010, 13:26   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
то ли я тупая, то ли я тупая
Что прям два раза? С чего бы это?
Все там просто:
Код:
 select 
  [имя],
  case [Год рождения] 
   when 1900 then 'Дедуля' 
   when 1950 then 'Дядько' 
   when 2000 then 'Младенец'
   else 'Дункан Маклауд' 
  end
 from Люди
Вот такое вернет вместо [Год рождения] некое значение перечисленное за THEN согласно кондиции в WHEN
Цитата:
'строка' + 'строка', насколько я помню
Ahtung! Если одна из строк NULL то NULL вернется
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.06.2010, 16:04   #8
kity
Пользователь
 
Регистрация: 25.05.2010
Сообщений: 22
По умолчанию

Ahtung! Если одна из строк NULL то NULL вернется

ага! у меня так и получилось!
как написать, чтобы null не возвращалось, если есть не нулевое значение!!!!
kity вне форума Ответить с цитированием
Старый 29.06.2010, 16:08   #9
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Stilet, с такими примерами я поняла. Но у меня по айдишнику книги вытягивалась информация о переплете(твердый или мягкий). Но в таблице книг на месте информации о переплете мог стоять NULL, и нужно было чтоб при этом если стоит NULL, то вместо него SELECT возвращал "нет информации". Честно, я не додумалась как это сделать кейсами. И сперва даже не додумалась, что можно просто в таблице с названиями переплетов сделать запись, которая и будет собственно выводить "нет информации". Тогда сделала функцию, возвращающую нужные мне данные.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чем заменить assign pasha_1994 Помощь студентам 6 21.12.2009 12:29
чем заменить goto? Agronom Общие вопросы C/C++ 3 19.12.2009 19:43
Чем заменить GetFreeSystemResources? rocky7 Компоненты Delphi 0 23.08.2009 20:20
Чем можно заменить объект BitBtn? frai Компоненты Delphi 3 14.04.2007 12:42