Как использовать Round и NULLIF вместе?

У меня есть столбец, который рассчитывает вес единицы (г), выполнив следующие вычисления

SELECT ROUND (Weight,0) / nullif ([Units per Carton],0) * 454 AS [Unit Weight (g)]
FROM [Item Master]

Я использовал нулевое значение, чтобы устранить деление на ноль. но я также хочу использовать Round() на делителе

я попробовал это:

SELECT  ROUND (Weight,0) / nullif(Round([Units per Carton],0) * 454) AS [Unit Weight (g)]
FROM [Item Master]

я попробовал это:

  SELECT  nullif (ROUND (Weight,0) / (Round([Units per Carton],0) * 454) AS [Unit Weight (g)]
    FROM [Item Master]

ошибка: сообщение156, уровень 15, состояние 1, строка 1 Неверный синтаксис рядом с ключевым словом "AS".

** Так как мне объединить функцию округления с нулем на делителе?? **

Недавно отредактированный код

SELECT ROUND (Weight,0) / nullif([Units per Carton],0) * 454 AS [Unit Weight (g)]
FROM [Item Master] 

SELECT ROUND (Weight / NULLIF([Units per Carton],0),0) * 454 AS [Unit Weight (g)]
FROM [Item Master]

Я попробовал выше, и результат, который я получил, находится в этом -> картина

Результаты разные, я хотел, чтобы результат был 151, 227 и 227, но эти результаты заменяются на 0.

1 ответ

Нуль никогда не должен быть дивидендом. Вы не получите логически непротиворечивые результаты, разделенные на нули. Помните, что ноль вообще не является значением, это просто маркер для "неизвестного". (И нуль не то же самое, что "ноль").

Вместо этого вы можете попробовать условие ветвления.

SELECT 454 * ROUND( (Weight * 1.0) / CASE WHEN [Units per Carton] = 0 THEN -1  
ELSE [Units per Carton] END , 0) AS [Unit Weight (g)]

Любые результирующие веса, которые являются отрицательными, заменяют 0.

Или в двух словах:

SELECT  @Quotient = CASE WHEN @divisor = 0 THEN NULL
                 ELSE @dividend / @divisor END
Другие вопросы по тегам