Это выглядит настолько знакомым большинству в этом сообществе, что все это о SQL CASE
выражении.Но сейчас я собираюсь в режиме сортировки, а не в реальной реализации.Я ценю, если есть оптимальный способ обойти это.
СЦЕНАРИЙ:
У меня есть один оператор выбора, где я извлекаю несколько столбцов из таблицы.В таблице есть столбцы с типом данных numeric(10, 3)
.Я выбрал этот тип данных, так как подумал, что если мне нужно отобразить значение int
, преобразование будет проще, а не наоборот.Вот структура таблицы.
Имя: FleetRange
Столбцы:
CaptionID INT NOT NULL
Caption NVARCHAR(50)
FleetRange_1 numeric(10,3)
FleetRange_2_4 numeric(10,3)
.......
Total numeric(10,3)
Критерии:
Текущий результат:
Мой SQL-запрос:
SELECT
CaptionId, Caption,
CASE
WHEN CaptionId IN (1, 2, 4, 5, 6, 7, 8, 9, 14, 15, 17, 18, 20, 21, 22, 23)
THEN CONVERT(INT, FleetRange_1)
WHEN CaptionId IN (11, 12, 13)
THEN CONVERT(NUMERIC(10, 2), FleetRange_1)
WHEN CaptionId IN (3, 10, 16, 19)
THEN CONVERT(NUMERIC(10, 3), FleetRange_1)
END AS 'FleetRange_1'
FROM
FleetRange
ПРИМЕЧАНИЕ:
То, что происходит в данный момент, последнееWHEN
отменяет предыдущую оценку, и, следовательно, каждая строка отображает значения с 3 decimal
местами, даже если есть целочисленное значение.
Я применил такую же структуру регистра для других numeric(10,3)
, поэтому я сократилзапрос.
вместо case
, записанного в приведенном выше запросе, я тоже попробовал следующий синтаксис - но без разницы.
WHEN
CaptionId = 11 OR
CaptionId = 12 OR
CaptionId = 13
THEN...
Мой ожидание (желаемый фактический результат): моя цель - конкретное значение строки должно быть преобразовано в int numeric
с заданной точностью, если вычисляется конкретное выражение when
с конкретным CaptionID
.
Примерно так:
CaptionID | Caption | FleetRange_1 | FleetRange_2_4 | .....
1 | SafetyFirst | 0 | 1 |
11 | DriveSafe | 2.15 | null|
3 | Caution | 1.025 | 2.174|