Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Вниз

Case в MS SQL   Найти похожие ветки 

 
Ярослав   (2005-05-24 09:47) [0]

Подскажите можно ли в MS SQL пользоваться case-м для выбора определенных действий (а не для выбора значения) как в delphi например или может есть другая функция?


 
ЮЮ ©   (2005-05-24 09:55) [1]

IF ... BEGIN
 UPDATE ...

ELSE BEGIN
 INSERT ...
END
в ХP , UDF и триггерах, естестаенно


 
Ярослав   (2005-05-24 10:01) [2]

Про IF я знаю но у меня аргумент может принимать несколько значений, и каскад IF-ов получаеться, с case-м все было бы красиво, так надо понимать, что нет его в таком виле в MS SQL?


 
Polevi ©   (2005-05-24 10:05) [3]

а что, в BOL не написано ?


 
Max Zyuzin ©   (2005-05-24 10:18) [4]

>Ярослав   (24.05.05 09:47)  
Case есть... читай хелп
Syntax
Simple CASE function:

CASE input_expression
   WHEN when_expression THEN result_expression
       [ ...n ]
   [
       ELSE else_result_expression
   ]
END

Searched CASE function:

CASE
   WHEN Boolean_expression THEN result_expression
       [ ...n ]
   [
       ELSE else_result_expression
   ]
END



 
Ярослав   (2005-05-24 10:43) [5]

Все это я видел но:
SELECT Category=
  CASE type
      WHEN "popular_comp" THEN "Popular Computing"
      WHEN "mod_cook" THEN "Modern Cooking"
      WHEN "business" THEN "Businness"
      WHEN "psyhology" THEN "Psyhology"
      WHEN "trad_cook" THEN "Traditional Cooking"
      ELSE "Not yet categorized"
   END,
   "Shortended Tiitle" = CONVERT(varchar(30), title),
   Price = price
FROM titles
WHERE price IS NOT NULL
ORDER BY type
COMPUTE AVG(price) BY TYPE
go

А мне не надо select aaa = case...
Мне надо
case @aaaa
  when 1 then select aaa from bbb
  when 2 then select ddd from bbb
  when 3 then select aaa from bbb
              where not ddd is null
к примеру, и еше со вложенностью, можно IF-ами но помоему это не совсем правильно


 
evvcom ©   (2005-05-24 11:11) [6]

select
 case @aaaa
   when 1 then aaa
   when 2 then ddd
   when 3 then aaa
 end
from bbb
where @aaaa <> 3 or not ddd is null


 
ЮЮ ©   (2005-05-24 11:16) [7]

>Мне надо
case @aaaa
 when 1 then select aaa from bbb
 when 2 then select ddd from bbb
 when 3 then select aaa from bbb
             where not ddd is null

На самом деле Select не туда положил. Тебе нужны не разные действия а возвращать разные поля в качестве одного поля результирующего набора данных
SELECT
 CASE @aaaa
   WHEN 1 THEN aaa
   WHEN 2 THEN ddd
   WHEN 3 THEN aaa
 END as aaa
FROM bbb ...


 
Ярослав   (2005-05-24 11:33) [8]

>> ЮЮ ©   (24.05.05 11:16) [7]
>>   SELECT
>>  CASE @aaaa
>>    WHEN 1 THEN aaa
>>    WHEN 2 THEN ddd
>>    WHEN 3 THEN aaa
>>  END as aaa
>> FROM bbb ..
А где  when 3 then select aaa from bbb
            where not ddd is null
Кроме того это был только пример, после then мне не обязательно делать select, или select может быть из разных таблиц, а вообще это какие либо совершенно не зависящие от друг друга (конечно зависящие от условия) действия


 
evvcom ©   (2005-05-24 11:42) [9]


> А где  when 3 then select aaa from bbb
>             where not ddd is null

См. [6].


> Кроме того это был только пример, после then мне не обязательно
> делать select, или select может быть из разных таблиц

Был пример, на пример и получил ответ. А для каждого отдельного случая соответственно и запрос переписывается в другом виде. Из другой таблицы? Так UNION есть для этого. В чем проблемы?


 
Ярослав   (2005-05-24 11:51) [10]

>> evvcom ©   (24.05.05 11:42) [9]
Внимательно читать все вопросы, в первом было написано Case как в Delphi.
Union здесь зачем, я хочу получить столбец из другой таблици а не объеденить две, т.е. данные первой то мне не нужны.
Еще раз повторяю - мне не нужно переписывать запрос в другом виде, мне нужно выполнять какие либо действия в зависимости от условия, т.е. в зависимости от уловия например выбрать данные, удалить, добавить, или вообще завершить работу процедуры, или триггера.


 
evvcom ©   (2005-05-24 12:11) [11]

CASE в стандарте для этого не предназначен.


 
ЮЮ ©   (2005-05-24 12:12) [12]

Если за каскадом IF-ов не видишь кода, то:
1) учисть писать "красиво", т.е. форматированно
2) разбивай код на "подпрограммы"

PROCEDURE P1234(@param int) AS BEGIN
 IF @param = 1 BEGIN
   ...
 END
 ELSE
   P234(@param)  
END
PROCEDURE P234(@param int) AS BEGIN
 IF @param = 2 BEGIN
   ...
 END
 ELSE
   34(@param)  
END
PROCEDURE P34(@param int) AS BEGIN
 IF @param = 3 BEGIN
   ...
 END
 ELSE BEGIN
   ...
 END  
END

:)


 
Ярослав   (2005-05-24 12:46) [13]

>> evvcom ©   (24.05.05 12:11) [11]
Это я и хотел узнать, а ни чего подобного в MS SQL нет?
>> ЮЮ ©   (24.05.05 12:12) [12]
И это красиво??? Case-м было бы значительно красивей!!!!!
Что такое форматированно я знаю.


 
evvcom ©   (2005-05-24 15:29) [14]


> а ни чего подобного в MS SQL нет?

IF ... ELSE ...

А в Oracle еще есть ELSEIF - немного покрасивее будет.


 
Polevi ©   (2005-05-24 15:37) [15]

>evvcom ©   (24.05.05 15:29) [14]
и чем он отличается от

IF <condition>
 DoSomething
ELSE
IF <condition>
 DoSomething
ELSE
IF <condition>
 DoSomething
ELSE
IF <condition>
 DoSomething
ELSE
 DoNothing


 
evvcom ©   (2005-05-24 15:46) [16]


> и чем он отличается от

одним разделителем! :)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.034 c
5-1087226009
far
2004-06-14 19:13
2005.07.11
Управляемое сохранение свойств компонента


14-1118750090
ANB
2005-06-14 15:54
2005.07.11
Что ленивее всего делать при работе в делфе ?


9-1111930862
qwe
2005-03-27 17:41
2005.07.11
3DS - текстуры


14-1118735280
Сатир
2005-06-14 11:48
2005.07.11
Сабж


3-1116936756
aleliko
2005-05-24 16:12
2005.07.11
TADOBlobStream





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский