Я пытаюсь остановить вход отрицательных величин для обработки в любом из диапазонов, скорее если они отрицательны, они должны выпадающий в конец 1-го оператора выбора как 'Недопустимый'. Это не работает как тогда, когда я запускаю тест против входа (-1000), я получаю строку для <=50K. Я боюсь, что мой синтаксис является неправильным, но не уверенным почему.
ALTER FUNCTION [dbo].[FN_1ST_UPB_Bands]
(
@FN_1ST_UPB_Band int
)
RETURNS varchar(16)
AS
BEGIN
declare @Return varchar (16)
select @Return =
Case
When ISNUMERIC(@FN_1ST_UPB_Band)= 1 then
case
When @FN_1ST_UPB_Band is NULL then ' Missing'
When @FN_1ST_UPB_Band = 0 then ' 0'
When @FN_1ST_UPB_Band < = 50000 then ' <=50K'
When @FN_1ST_UPB_Band between 50000 and 100000 then ' 50-100'
When @FN_1ST_UPB_Band between 100000 and 150000 then '100-150'
When @FN_1ST_UPB_Band between 150000 and 200000 then '150-200'
When @FN_1ST_UPB_Band between 200000 and 250000 then '200-250'
When @FN_1ST_UPB_Band between 250000 and 300000 then '250-300'
When @FN_1ST_UPB_Band between 300000 and 350000 then '300-350'
When @FN_1ST_UPB_Band between 350000 and 400000 then '350-400'
When @FN_1ST_UPB_Band between 400000 and 450000 then '400-450'
When @FN_1ST_UPB_Band between 450000 and 500000 then '450-500'
When @FN_1ST_UPB_Band > 500000 then '500K+'
else null End
else 'Invalid' End
RETURN @return
End
Ну разве -1000 не меньше 50000? Разве вам не нужно, чтобы этот регистр был:
Когда @ FN_1ST_UPB_Band от 0 до 49999, тогда '<= 50K'
ISNUMERIC
всегда истинно для поля INT
, вы можете смело отбросить его.
Попробуйте так:
declare @FN_1ST_UPB_Band INT
SET @FN_1ST_UPB_Band = -1000
select case
When @FN_1ST_UPB_Band is NULL then ' Missing'
When @FN_1ST_UPB_Band < 0 Then 'Invalid'
When @FN_1ST_UPB_Band = 0 then ' 0'
When @FN_1ST_UPB_Band < = 50000 then ' <=50K'
When @FN_1ST_UPB_Band between 50000 and 100000 then ' 50-100'
When @FN_1ST_UPB_Band between 100000 and 150000 then '100-150'
When @FN_1ST_UPB_Band between 150000 and 200000 then '150-200'
When @FN_1ST_UPB_Band between 200000 and 250000 then '200-250'
When @FN_1ST_UPB_Band between 250000 and 300000 then '250-300'
When @FN_1ST_UPB_Band between 300000 and 350000 then '300-350'
When @FN_1ST_UPB_Band between 350000 and 400000 then '350-400'
When @FN_1ST_UPB_Band between 400000 and 450000 then '400-450'
When @FN_1ST_UPB_Band between 450000 and 500000 then '450-500'
When @FN_1ST_UPB_Band > 500000 then '500K+'
else null
End
в таком случае (без каламбура)
сделайте так
When @FN_1ST_UPB_Band < 0 Then 'Invalid'
When @FN_1ST_UPB_Band >= 0 and @FN_1ST_UPB_Band < = 50000 then ' <=50K'
потому что -1000 меньше 50000
Поскольку они оцениваются по порядку, -1000 составляет <= 50000, поэтому он оценивается как истина и возвращает «<= 50000». Вместо этого вам понадобится между 1 и 49999
(не 50000, поскольку у вас было 50000, это будет истинно в 2 случаях).