2014-12-03 2 views
0

Привет У меня был стол под названием Details, который содержит столбец Day1 с типом данных как Int. Теперь, если в столбце Day1 содержится любое число, тогда я хочу отобразить 100 else, если он содержит null. Я хочу отображать только нуль. Помимо написания ниже сазе есть ли более простой способ сделать это ?:Ручка Нулевые значения без корпуса

Case when Day1=10 /*(Apart from 0 it can have any value including null)*/ then 100 else Day1 

У меня было около 31 столбцов, я не хочу, чтобы написать случай для каждого столбца. Есть лучший способ сделать это?

ответ

0

Конечно нет, если вы думаете об использовании ISNULL() или COALESCE() функции, но вы можете изменить ваше выражение CASE быть как ниже

Case when Day1 > 0 or Day1 IS NULL then 100 else Day1 
0

Привет вы можете проверить на NULL в CASE-Заявление:

SELECT CASE WHEN Day1 IS NULL THEN Day1 ELSE 100 END AS Day1 FROM Details 
0

Ну, я точно не понял, что вы намереваетесь написать такой запрос, но, тем не менее, этот случай сделает это.

CASE WHEN Day1 IS NULL THEN NULL ELSE 100 END 
0

Так как вы говорите, что вы хотите проверить, является ли это число или нет, ISNUMERIC приходит на ум:

CASE WHEN ISNUMERIC(Day1) = 1 THEN 100 ELSE NULL END 

, но я думаю, что просто писать

CASE WHEN Day1 IS NULL THEN NULL ELSE 100 END 

или

IIF(ISNUMERIC(Day1) = 1, 100, NULL) 

больше информации (см., как вам не нужен CASE в этом случае? :-))

0

Если вы используете SQL Server 2012 или более поздней версии:

IIF(Day1 IS NULL, NULL, 100) 

или вы можете сделать определенную пользователем функцию, чтобы сделать то же самое еще более лаконично (работает со всеми версиями SQL Server):

CREATE FUNCTION dbo.MyFunc(@Day int) 
RETURNS int 
RETURN (CASE WHEN @Day IS NOT NULL THEN 100 ELSE NULL END) 

Использование:

SELECT MyFunc(Day1), MyFunc(Day2) 
Смежные вопросы