Использовать контрольные знаки внутри оператора sql case
Я ищу способ создания операторов case в запросе select sql, использующем меньше и больше знаков. Например, я хочу выбрать ранжирование на основе переменной:
DECLARE @a INT
SET @a = 0
SELECT CASE
WHEN @a < 3 THEN 0
WHEN @a = 3 THEN 1
WHEN @a > 3 THEN 2
END
Я хотел бы написать это как:
DECLARE @a INT
SET @a = 0
SELECT CASE @a
WHEN < 3 THEN 0
WHEN 3 THEN 1
WHEN > 3 THEN 2
END
... но SQL не позволяет мне использовать < и > знаки таким образом. Есть ли способ, которым я могу это сделать, это SQL 2005, или мне нужно использовать код, как в первом.
Причина, по которой только один раз нужен код, заключается в том, что код сделает намного более удобочитаемым/поддерживаемым, а также потому, что я не уверен, что SQL-серверу придется запускать расчет для каждого оператора CASE.
Я ищу аргумент case VB.NET equivelent:
Select Case i
Case Is < 100
p = 1
Case Is >= 100
p = 2
End Select
Возможно, это невозможно в SQL, и это нормально, я просто хочу подтвердить это.
Ответы
Ответ 1
Вы можете использовать SIGN как
DECLARE @a INT
SET @a = 0
SELECT CASE SIGN(@a - 3)
WHEN -1 THEN 0
WHEN 0 THEN 1
WHEN 1 THEN 2
END
Если @a
меньше 3, то @a - 3
приводит к отрицательному int, в котором SIGN возвращает -1.
Если @a
равно 3 или больше, тогда SIGN возвращает 0 или 1 соответственно.
Если требуемый результат - 0, 1 и 2, вы можете упростить еще больше:
DECLARE @a INT
SET @a = 0
SELECT SIGN(@a - 3) + 1
Ответ 2
Использование SIGN
в качестве предложенное @Jose Rui Santos, кажется приятным обходным решением. Альтернативой может быть присвоение выражения псевдонимам, использование подзапроса и проверка выражения (используя его псевдоним) во внешнем выборе:
SELECT
…,
CASE
WHEN expr < 3 THEN …
WHEN expr > 3 THEN …
END AS …
FROM (
SELECT
…,
a complex expression AS expr
FROM …
…
)
Ответ 3
SELECT
CASE
WHEN ColumnName >=1 and ColumnName <=1 THEN 'Fail'
WHEN ColumnName >=6 THEN 'Pass'
ELSE 'Test'
END
FROM TableName