Ответ 1
convert(decimal(5,2),(100 * convert(float,[TotalVisit1])/convert(float,[TotalVisits]))) AS Visit1percent
Уродливый, но он работает.
Как я могу преобразовать это в десятичный знак в SQL? Ниже приведено уравнение, и я получаю ответ как 78 (целое число), но реальный ответ равен 78.6 (с десятичной точкой), поэтому мне нужно показать это, так как в противном случае отчет не будет составлять до 100%
(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
convert(decimal(5,2),(100 * convert(float,[TotalVisit1])/convert(float,[TotalVisits]))) AS Visit1percent
Уродливый, но он работает.
Попробуйте следующее:
(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
По крайней мере, в MySQL (если это помогает), если вы хотите использовать числа с плавающей точкой, вам нужно было использовать поле типа float, а не обычные поля int.
Просто добавьте десятичное число в 100
(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
это заставляет всю обработку выполняться в поплавках... если вы хотите получить окончательный вывод в виде текста и усекаетесь для отображения только на одно десятичное место, используйте функцию Str
Str( 100.0 * [TotalVisit1]/[TotalVisits], 4, 1 ) AS Visit1percent
CAST(ROUND([TotalVisit1]*100.0/[TotalVisits],2)as decimal(5,2)) as Percentage
Не уродливые и работайте лучше и быстрее, наслаждайтесь!
Вероятно, это может привести к излишним последствиям, но вы можете подумать о том, чтобы отличить все значения от поплавков, чтобы обеспечить точность на всех этапах.
(100.0 * ( [TotalVisit1]+0.0 )/([TotalVisits]+0.0) ) as Visit1percent
Обратите внимание: вам действительно нужно ввести код здесь для случая, когда TotalVisits == 0 или вы получите ответ деления на 0.
SELECT(ROUND(CAST(TotalVisit1 AS DECIMAL)/TotalVisits,1)) AS 'Visit1percent'
Это вернет десятичное число, а ROUND округляет его до одной цифры. Так что в вашем случае вы получите 76.6. Если вы не хотите, чтобы любые цифры меняли 1 на 0, и если вы хотите, чтобы две цифры меняли его на 2.
Попробуйте с этим, no round и str или Over(). Я нашел это как более простой способ сделать это.
cast((count(TotalVisit1) * 100.0) /TotalVisits as numeric(5,3)) as [Visit1percent]
Вы можете изменить количество десятичных точек, как вы хотите
например. числовое (5,2) или числовое (5,4)
Это может не касаться вашей проблемы напрямую, но когда вы обходите набор номеров для отображения, вам никогда не гарантируется получение номеров, которые добавляются до 100, если вы не примете специальные меры предосторожности. Например, округление 33.33333, 33.33333 и 33.33333 собирается оставить вас на короткую сумму, поэтому логично сделать, чтобы изменить процент для наибольшего значения в наборе, чтобы учесть любую разницу.
Вот как это сделать в Oracle SQL с использованием аналитических функций и подзапроса факторинга (WITH) для генерации выборочных данных.
with data as (select 25 num from dual union all
select 25 from dual union all
select 25 from dual)
select num,
case
when rnk = 1
then 100 - sum(pct) over (order by rnk desc
rows between unbounded preceding
and 1 preceding)
else pct
end pct
from
(
select num,
round(100*ratio_to_report(num) over ()) pct,
row_number() over (order by num desc) rnk
from data
)
/
NUM PCT
---------------------- ----------------------
25 33
25 33
25 34
В мс Доступ Вы можете использовать функцию SQL ROUND (число, число десятичных знаков), Она будет округлять число до заданного числа десятичных знаков:
ROUND ((100 * [TotalVisit1]/[TotalVisits]), 1) AS Visit1percent