#sql #case
#sql #случай
Вопрос:
Я написал следующее, однако в ** ** после 16 ниже я хотел бы завершить оператор case, разрешив всем остальным результатам возвращаться так, как они были изначально, ничего не делать — вместо возврата null .
НАПРИМЕР, необработанные данные
1
2
3
4
7
10
16
EXAMPLE1
EXAMPLE2
EXAMPLE3
Результаты, которые я бы получил с помощью кода ниже
User Security ID
User Name
Full Name
State
Windows Security ID
License Type
Application ID
NULL
NULL
NULL
Результаты, которые я хочу
User Security ID
User Name
Full Name
State
Windows Security ID
License Type
Application ID
EXAMPLE1
EXAMPLE2
EXAMPLE3
Запрос:
SELECT
[Date and Time] as [Date],
[User ID] as [User Performing Change],
[Type of Change],
CASE [Field No_]
WHEN 1 THEN 'User Security ID'
WHEN 2 THEN 'User Name'
WHEN 3 THEN 'Full Name'
WHEN 4 THEN 'State'
WHEN 7 THEN 'Windows Security ID'
WHEN 10 THEN 'License Type'
**WHEN 16 THEN 'Application ID'
END as [Data],**
[Old Value],
[New Value],
[Record ID]
FROM [DB].[dbo].[TABLE$Change Log Entry]
where [Table No_] = 20000
order by [Field No_]
Ответ №1:
Используйте else
:
CASE [Field No_]
WHEN '1' THEN 'User Security ID'
WHEN '2' THEN 'User Name'
WHEN '3' THEN 'Full Name'
WHEN '4' THEN 'State'
WHEN '7' THEN 'Windows Security ID'
WHEN '10' THEN 'License Type'
WHEN '16' THEN 'Application ID'
ELSE [Field No_]
END as [Data]
Обратите внимание, что я изменил сравниваемые значения с буквенных чисел на буквенные строки, поскольку кажется, что ваш столбец имеет строковый тип данных.
Редактировать
Если ваш столбец имеет числовой тип данных, то:
CASE [Field No_]
WHEN 1 THEN 'User Security ID'
WHEN 2 THEN 'User Name'
WHEN 3 THEN 'Full Name'
WHEN 4 THEN 'State'
WHEN 7 THEN 'Windows Security ID'
WHEN 10 THEN 'License Type'
WHEN 16 THEN 'Application ID'
ELSE CONVERT(VARCHAR(MAX), [Field No_])
END as [Data]
Комментарии:
1. Теперь я, похоже, сталкиваюсь со следующей ошибкой: ошибка преобразования не удалась при преобразовании значения varchar ‘Идентификатор безопасности пользователя’ в тип данных int.
2. @ChristopherBrogan: хорошо, итак, у вас есть целочисленный столбец. Смотрите мое редактирование.