2016-11-30 2 views
0

Я новичок в SQL, и я пытаюсь рассчитать процент от двух предварительно рассчитанных чисел. Я хочу, чтобы процент составлял 2 десятичных знака. Числа являются целыми числами, поэтому я делаю их запятыми перед вычислением процента. Расчет простоКастинг как десятичный не действует как ожидалось

(Risk1/GrandTotal * 100) оба из той же таблицы.

Кусок кода приведен ниже:

SELECT risk_date_day, 
     ((CAST(Risk1 as decimal(38,2))/CAST(GrandTotal as decimal(38,2))) * 100) FROM DPRAT2_Export 

The result shows 6 numbers after the decimal

Я пробовал много разных чисел для параметров десятичной (х, х). Из исследования я понял, что 2-е число - это масштаб и который определяет количество мест после десятичной. Я не уверен, почему результат имеет 6 знаков после запятой. Пожалуйста помоги. Благодаря!

+1

Пожалуйста, отметьте свой номер с помощью базы данных, которую вы используете. –

ответ

2

Сделайте cast()после разделения:

SELECT risk_date_day, 
     CAST(Risk1 * 100.0/GrandTotal as decimal(38, 2)) 
FROM DPRAT2_Export; 

SQL в целом и SQL Server, в частности, имеет очень тайные правила для определения количества десятичных знаков в результате математических операций над десятичными знаками. Итак, просто преобразуйте результат.

Если есть риск, что GrandTotal может быть равен нулю, я бы посоветовал:

SELECT risk_date_day, 
     CAST(Risk1 * 100.0/NULLIF(GrandTotal, 0) as decimal(38, 2)) 
FROM DPRAT2_Export; 

Это предотвращает ошибку деления на ноль, возвращая NULL вместо этого.

+0

Оба метода дают мне только округленное значение процента, за которым следуют 2 нуля после десятичной дроби. Напр. 18.00, 7.00 ..... Но, похоже, мой предыдущий код работал, когда я использовал UPDATE для ввода значений в другой таблице. Это не работает, когда я показываю его с помощью SELECT. Нечетный ... –

+0

@FariyaFarhad. , , В некоторых базах данных выполняется целочисленное деление. Если вы используете одну из этих баз данных, просто умножайте ее на 100.0 вместо 100. Вот почему вы должны правильно пометить свой вопрос. –

+0

Умножение на 100.0 сработало! благодаря –

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

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