Инструкция CASE (многомерные выражения)
Позволяет возвращать указанные значения из нескольких сравнений согласно условию. Существуют два типа инструкции CASE.
Простая инструкция CASE, сравнивающая выражение с набором простых выражений и возвращающая определенные значения.
Инструкция CASE для поиска, вычисляющая набор выражений логического типа и возвращающая определенные значения.
Синтаксис
Simple Case Statement
CASE [input_expression]
WHEN when_expression THEN when_true_result_expression
[...n]
[ELSE else_result_expression]
END
Search Case Statement
CASE
WHEN Boolean_expression THEN when_true_result_expression
[...n]
[ELSE else_result_expression]
END
Аргументы
input_expression
Многомерное выражение, результатом вычисления которого является скалярное значение.
when_expression
Указанное скалярное значение, по которому вычисляется input_expression , которое при вычислении на значение true возвращает скалярное значение else_result_expression.
when_true_result_expression
Скалярное значение, которое возвращается, если результатом предложения WHEN является TRUE.
else_result_expression
Скалярное значение, возвращаемое в том случае, если при вычислении ни одно из предложений WHEN не вернуло TRUE.
Boolean_expression
Многомерное выражение, результатом вычисления которого является скалярное значение.
Замечания
Если нет предложения ELSE, а все предложения WHEN дали значение false, тогда результатом будет пустая ячейка.
Простое выражение CASE
Многомерные выражения вычисляют простое выражение регистра, разрешая input_expression скалярным значением. Затем это скалярное значение сравнивается со скалярным значением when_expression. Если совпадают два скалярных значения, инструкция CASE возвращает значение when_true_expression. Если скалярные значения не совпадают, вычисляется следующее предложение WHEN. Если все предложения WHEN оцениваются как false, возвращается значение else_result_expression из предложения ELSE, если таковые имеются.
В следующем примере значение меры Reseller Order Count сравнивается в нескольких предложениях WHEN и возвращается результат, зависящий от значения меры Reseller Order Count в каждом году. Для значений счетчика заказов торговых посредников, которые не соответствуют скалярным значениям, указанным в when_expression в предложении WHEN, возвращается скалярное значение else_result_expression.
WITH MEMBER [Measures].x AS
CASE [Measures].[Reseller Order Count]
WHEN 0 THEN 'NONE'
WHEN 1 THEN 'SMALL'
WHEN 2 THEN 'SMALL'
WHEN 3 THEN 'MEDIUM'
WHEN 4 THEN 'MEDIUM'
WHEN 5 THEN 'LARGE'
WHEN 6 THEN 'LARGE'
ELSE 'VERY LARGE'
END
SELECT Calendar.[Calendar Year] on 0
, NON EMPTY [Geography].[Postal Code].Members ON 1
FROM [Adventure Works]
WHERE [Measures].x
Выражение CASE для поиска
Для более сложных вычислений можно использовать выражение CASE для поиска. Оно позволяет узнать, принадлежит ли значение входного выражения диапазону значений. Многомерное выражение вычисляет предложения WHEN, чтобы они появились в инструкции CASE.
В следующем примере мера счетчика заказов торговых посредников оценивается по указанному Boolean_expression для каждого из нескольких предложений WHEN. Возвращается результат, зависящий от значения меры Reseller Order Count в каждом году. Поскольку предложения WHEN вычисляются в том порядке, в котором они перечислены, всем значениям больше 6 можно легко присвоить значение «VERY LARGE», не указывая все значения явно. Для значений счетчика заказов торговых посредников, которые не указаны в предложении WHEN, возвращается скалярное значение else_result_expression .
WITH MEMBER [Measures].x AS
CASE
WHEN [Measures].[Reseller Order Count] > 6 THEN 'VERY LARGE'
WHEN [Measures].[Reseller Order Count] > 4 THEN 'LARGE'
WHEN [Measures].[Reseller Order Count] > 2 THEN 'MEDIUM'
WHEN [Measures].[Reseller Order Count] > 0 THEN 'SMALL'
ELSE "NONE"
END
SELECT Calendar.[Calendar Year] on 0,
NON EMPTY [Geography].[Postal Code].Members on 1
FROM [Adventure Works]
WHERE [Measures].x
См. также
Инструкции скриптов многомерных выражений (многомерные выражения)