![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Case в MS SQL [D7, MSSQL]
Ярослав © (2005-05-24 09:47:00)Подскажите можно ли в MS SQL пользоваться case-м для выбора определенных действий (а не для выбора значения) как в delphi например или может есть другая функция?
evvcom (2005-05-24 15:46:00) [1]
> и чем он отличается от
одним разделителем! :)
Polevi (2005-05-24 15:37:00) [2]>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:29:00) [3]
> а ни чего подобного в MS SQL нет?
IF ... ELSE ...
А в Oracle еще есть ELSEIF - немного покрасивее будет.
Ярослав (2005-05-24 12:46:00) [4]>> evvcom © (24.05.05 12:11) [11]
Это я и хотел узнать, а ни чего подобного в MS SQL нет?
>> ЮЮ © (24.05.05 12:12) [12]
И это красиво??? Case-м было бы значительно красивей!!!!!
Что такое форматированно я знаю.
ЮЮ (2005-05-24 12:12:00) [5]Если за каскадом 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
:)
evvcom (2005-05-24 12:11:00) [6]CASE в стандарте для этого не предназначен.
Ярослав (2005-05-24 11:51:00) [7]>> evvcom © (24.05.05 11:42) [9]
Внимательно читать все вопросы, в первом было написано Case как в Delphi.
Union здесь зачем, я хочу получить столбец из другой таблици а не объеденить две, т.е. данные первой то мне не нужны.
Еще раз повторяю - мне не нужно переписывать запрос в другом виде, мне нужно выполнять какие либо действия в зависимости от условия, т.е. в зависимости от уловия например выбрать данные, удалить, добавить, или вообще завершить работу процедуры, или триггера.
evvcom (2005-05-24 11:42:00) [8]
> А где when 3 then select aaa from bbb
> where not ddd is null
См. [6].
> Кроме того это был только пример, после then мне не обязательно
> делать select, или select может быть из разных таблиц
Был пример, на пример и получил ответ. А для каждого отдельного случая соответственно и запрос переписывается в другом виде. Из другой таблицы? Так UNION есть для этого. В чем проблемы?
Ярослав (2005-05-24 11:33:00) [9]>> ЮЮ © (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 может быть из разных таблиц, а вообще это какие либо совершенно не зависящие от друг друга (конечно зависящие от условия) действия
ЮЮ (2005-05-24 11:16:00) [10]>Мне надо
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 ...
evvcom (2005-05-24 11:11:00) [11]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 10:43:00) [12]Все это я видел но:
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-ами но помоему это не совсем правильно
Max Zyuzin (2005-05-24 10:18:00) [13]>Ярослав (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
Polevi (2005-05-24 10:05:00) [14]а что, в BOL не написано ?
Ярослав (2005-05-24 10:01:00) [15]Про IF я знаю но у меня аргумент может принимать несколько значений, и каскад IF-ов получаеться, с case-м все было бы красиво, так надо понимать, что нет его в таком виле в MS SQL?
ЮЮ (2005-05-24 09:55:00) [16]IF ... BEGIN
UPDATE ...
ELSE BEGIN
INSERT ...
END
в ХP , UDF и триггерах, естестаенно