Уже есть много ответов относительно CASE
. Я объясню, когда и как использовать CASE
.
Вы можете использовать выражения CASE в любом месте SQL-запросов. Выражения CASE можно использовать в операторах SELECT, предложениях WHERE, предложениях по предложениям, предложениях HAVING, операторах Insert, UPDATE и DELETE.
Выражение CASE имеет следующие два формата:
Простое выражение CASE
CASE expression
WHEN expression1 THEN Result1
WHEN expression2 THEN Result2
ELSE ResultN
END
Это сравнивает выражение с набором простых выражений, чтобы найти результат. Это выражение сравнивает выражение с выражением в каждом предложении WHEN для эквивалентности. Если выражение в предложении WHEN совпадает, будет возвращено выражение в предложении THEN.
Это вопрос ОП. 22978 OR 23218 OR 23219
не получит значение, равное выражению, т.е. ebv.db_no. Вот почему это дает ошибку. Типы данных input_expression и каждого when_expression должны быть одинаковыми или неявным преобразованием.
Найденные выражения CASE
CASE
WHEN Boolean_expression1 THEN Result1
WHEN Boolean_expression2 THEN Result2
ELSE ResultN
END
Это выражение оценивает набор логических выражений, чтобы найти результат. Это выражение допускает операторы сравнения и логические операторы AND / OR с каждым логическим выражением.
1. ВЫБРАТЬ оператор с выражениями CASE
--Simple CASE expression:
SELECT FirstName, State=(CASE StateCode
WHEN 'MP' THEN 'Madhya Pradesh'
WHEN 'UP' THEN 'Uttar Pradesh'
WHEN 'DL' THEN 'Delhi'
ELSE NULL
END), PayRate
FROM dbo.Customer
-- Searched CASE expression:
SELECT FirstName,State=(CASE
WHEN StateCode = 'MP' THEN 'Madhya Pradesh'
WHEN StateCode = 'UP' THEN 'Uttar Pradesh'
WHEN StateCode = 'DL' THEN 'Delhi'
ELSE NULL
END), PayRate
FROM dbo.Customer
2. Оператор обновления с выражением CASE
-- Simple CASE expression:
UPDATE Customer
SET StateCode = CASE StateCode
WHEN 'MP' THEN 'Madhya Pradesh'
WHEN 'UP' THEN 'Uttar Pradesh'
WHEN 'DL' THEN 'Delhi'
ELSE NULL
END
-- Simple CASE expression:
UPDATE Customer
SET StateCode = CASE
WHEN StateCode = 'MP' THEN 'Madhya Pradesh'
WHEN StateCode = 'UP' THEN 'Uttar Pradesh'
WHEN StateCode = 'DL' THEN 'Delhi'
ELSE NULL
END
3.ORDER BY с выражениями CASE
-- Simple CASE expression:
SELECT * FROM dbo.Customer
ORDER BY
CASE Gender WHEN 'M' THEN FirstName END Desc,
CASE Gender WHEN 'F' THEN LastName END ASC
-- Searched CASE expression:
SELECT * FROM dbo.Customer
ORDER BY
CASE WHEN Gender='M' THEN FirstName END Desc,
CASE WHEN Gender='F' THEN LastName END ASC
4.Переговорка с выражением CASE
-- Simple CASE expression:
SELECT FirstName ,StateCode,Gender, Total=MAX(PayRate)
FROM dbo.Customer
GROUP BY StateCode,Gender,FirstName
HAVING (MAX(CASE Gender WHEN 'M'
THEN PayRate
ELSE NULL END) > 180.00
OR MAX(CASE Gender WHEN 'F'
THEN PayRate
ELSE NULL END) > 170.00)
-- Searched CASE expression:
SELECT FirstName ,StateCode,Gender, Total=MAX(PayRate)
FROM dbo.Customer
GROUP BY StateCode,Gender,FirstName
HAVING (MAX(CASE WHEN Gender = 'M'
THEN PayRate
ELSE NULL END) > 180.00
OR MAX(CASE WHEN Gender = 'F'
THEN PayRate
ELSE NULL END) > 170.00)
Надеюсь, что эти варианты использования помогут кому-то в будущем.
Источник