Текущий архив: 2005.07.11;
Скачать: CL | DM;
Вниз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;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.057 c