Может ли предложение SQL if else иметь выбор внутри? - PullRequest
3 голосов
/ 30 ноября 2011

Я сомневаюсь, что это возможно, но здесь идет.

Мне нужно сформулировать SQL-запрос (абсолютно не разрешен хранимой процедуры), который делает что-то вроде этого:

Select A.valueFromTable -B.ValueFromTable As result
From table as A inner join table as B
on A.ValueID = B.ValueID
Where ValueID =5

Но мне нужно условие:

if (result <0)
Begin
select A As result ....
end
else
select A-B as result ...

Любая помощь будет принята с благодарностью, даже если она подтверждает, что это не может быть сделано.

По результатам поиска, я считаю, что версия SQL Server, которую я сейчас использую, - 8.0

.

Ответы [ 4 ]

5 голосов
/ 30 ноября 2011
Select 
    CASE
        WHEN A.valueFromTable -B.ValueFromTable < 0 THEN A.valueFromTable 
    ELSE A.valueFromTable -B.ValueFromTable END As result
From table as A inner join table as B
on A.ValueID = B.ValueID
Where ValueID =5
1 голос
/ 30 ноября 2011

Используйте оператор CASE:

SELECT CASE WHEN A-B < 0 THEN A ELSE A-B END AS result
0 голосов
/ 30 ноября 2011

Я вполне уверен, что вы можете найти решение, используя условные операторы IF, но если ничего не помогает, попробуйте действительно запутанный: SELECT (A.valueFromTable - (result <0) * B.ValueFromTable) </p>

Это основано на ложных условиях, оценивающихся в ноль.

0 голосов
/ 30 ноября 2011

Вы ищете оператор SQL CASE.

select
    case when (A-B < 0)
        then A
    else A-B
    end as result
from
    ...
...