Member 12770648 Ответов: 3

Деление на ноль как вы справляетесь с этим оператором select


Уважаемый Эксперт,

Как вы справляетесь с делением на ноль, если это произойдет, чтобы не создавать проблем с
инструкция Select

как показано ниже

((Q1Y2C - Q1Y1C)*100)/Q1Y1C DIFFCQ1P ,
((Q2Y2C - Q2Y1C)*100)/Q2Y1C DIFFCQ2P ,
((Q3Y2C - Q3Y1C)*100)/Q3Y1C DIFFCQ3P ,
((Q4Y2C - Q4Y1C)*100)/Q4Y1C DIFFCQ4P


Это
Q1Y1C ,
Q2Y1C ,
Q3Y1C ,
Q4Y1C



ВЫБЕРИТЕ BRNNAME, ОЦЕНКА ,
Q1Y1C , Q1Y2C ,
Q2Y1C , Q2Y2C ,
Q3Y1C , Q3Y2C ,
Q4Y1C , Q4Y2C ,
Q1Y1P , Q1Y2P ,
Q2Y1P , Q2Y2P ,
Q3Y1P , Q3Y2P ,
Q4Y1P , Q4Y2P ,
(Q1Y2C - Q1Y1C ) DIFFCQ1C ,
(Q2Y2C - Q2Y1C ) DIFFCQ2C ,
(Q3Y2C - Q3Y1C ) DIFFCQ3C ,
(Q4Y2C - Q4Y1C ) DIFFCQ4C ,
((Q1Y2C - Q1Y1C)*100)/Q1Y1C DIFFCQ1P ,
((Q2Y2C - Q2Y1C)*100)/Q2Y1C DIFFCQ2P ,
((Q3Y2C - Q3Y1C)*100)/Q3Y1C DIFFCQ3P,
((Q4Y2C - Q4Y1C)*100)/Q4Y1C DIFFCQ4P
ИЗ YFINAL ORDER BY BRNNAME


деление на ноль

((Q1Y2C - Q1Y1C)*100)/Q1Y1C DIFFCQ1P ,
((Q2Y2C - Q2Y1C)*100)/Q2Y1C DIFFCQ2P ,
((Q3Y2C - Q3Y1C)*100)/Q3Y1C DIFFCQ3P,
((Q4Y2C - Q4Y1C)*100)/Q4Y1C DIFFCQ4P

Что я уже пробовал:

Текущие проблемы развития sql server

3 Ответов

Рейтинг:
13

Maciej Los

В дополнение к решению №1 по Пит О'Хэнлон[^] (полностью согласен), вы можете сделать это на стороне сервера, но вы должны проверить, если делитель больше нуля. Например:

WHERE COALESCE(Q1Y1C,0)>0 AND COALESCE(Q2Y1C,0)>0 AND COALESCE(Q3Y1C,0)>0 AND COALESCE(Q4Y1C, 0)>0 


Рейтинг:
1

Pete O'Hanlon

Честно говоря, я бы не стал выполнять вычисления на стороне сервера в подобной ситуации - если только вы не делали это как оператор set, который влияет на что-то вроде вставки или обновления, это то, что должно быть выполнено на стороне клиента, поскольку это подозрительно похоже на то, что бизнес-правило должно определять, что вы хотите сделать. Например, вы можете захотеть, чтобы клиентская сторона по умолчанию разделила поля на ноль до 0, или вы можете обновить бизнес-объект, чтобы сказать, что информация отсутствует.


Maciej Los

5ed!

Рейтинг:
1

Richard Deeming

Самый простой вариант-сделать делитель Null вместо 0 Таким образом, дивизия вернется Null вместо того, чтобы выдавать ошибку.

((Q1Y2C - Q1Y1C) * 100) / NullIf(Q1Y1C, 0) As DIFFCQ1P


Maciej Los

Вот это да!