2014-11-18 3 views
0

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

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

Я использовал NULLIF устранить деление на ноль. но я также хочу использовать 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] 

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

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

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

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] 

Я попытался выше и результат я получил в этом ->picture

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

+3

вам не хватает скобку: 'NULLIF (ROUND (вес, 0)) ' – Lamak

+0

@Lamak Я хочу, чтобы все было округлено, но только проверите nullif на делителе, поэтому я не делю на ноль, поэтому я хочу, чтобы блок в коробке был закруглен и nuliif на этом ..... – HackGod555

+0

Зачем вам использовать/nullif ([Units per Carton], 0), если хотите избежать деления на ноль? – Paparazzi

ответ

0

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

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

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 
+0

Я пробовал ваш запрос, но у меня все еще есть отличия в результате, которые можно найти в этом -> [картинка] (http://imgur.com/jbJ0Han). Вышеупомянутый результат ожидаемого доступа и ниже - результат ваш запрос они не совпадают. – HackGod555

+0

А, MS Access? Я не уверен, что это параметры запроса такие же, как база данных SQL Server. – sqldoug

 Смежные вопросы

  • Нет связанных вопросов^_^