Pregunta

¿Cómo puedo convertir esto a un decimal en SQL? A continuación se muestra la ecuación y obtengo la respuesta como 78 (entero) pero la respuesta real es 78.6 (con un decimal), así que necesito mostrar esto porque, de lo contrario, el informe no se sumará hasta el 100%

(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
¿Fue útil?

Solución

convert(decimal(5,2),(100 * convert(float,[TotalVisit1])/convert(float,[TotalVisits]))) AS Visit1percent

Feo, pero funciona.

Otros consejos

Prueba esto:

(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent

Al menos en MySQL (si es que ayuda), si desea usar números flotantes, tuvo que usar un campo flotante de tipo, no los campos int regulares.

Solo agrega un decimal a los 100

(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent

esto obliga a que todo el procesamiento se realice en flotadores ... si desea que la salida final sea texto y se trunque para mostrar solo una posición decimal, use la función Str

Str( 100.0 * [TotalVisit1]/[TotalVisits], 4, 1 ) AS Visit1percent
CAST(ROUND([TotalVisit1]*100.0/[TotalVisits],2)as decimal(5,2)) as Percentage


No es feo y funciona mejor y más rápido, ¡disfrútalo!

Probablemente sea excesivo hacerlo, pero es posible que desee considerar la posibilidad de convertir todos los valores a flotadores para garantizar la precisión en todas las fases.

(100.0 * ( [TotalVisit1]+0.0 )/([TotalVisits]+0.0) ) as Visit1percent

Tenga en cuenta que realmente necesita poner el código aquí en el caso de que TotalVisits == 0 o obtendrá una división por 0 respuestas.

SELECT(ROUND(CAST(TotalVisit1 AS DECIMAL)/TotalVisits,1)) AS 'Visit1percent'

Esto devolverá un decimal y la RONDA lo redondeará a un dígito. Así que en tu caso obtendrías 76.6. Si no desea que ningún dígito cambie el 1 a 0 y si desea dos dígitos, cámbielo a 2.

Intenta con esto, no redondear y str o Over (). Encontré esto como una forma más simple de hacerlo.

cast((count(TotalVisit1) * 100.0) /TotalVisits as numeric(5,3))  as [Visit1percent]

Puede cambiar el número de puntos decimales que desee

  

por ejemplo numérico (5,2) o numérico (5,4)

Es posible que esto no le resuelva el problema directamente, pero cuando redondee un conjunto de números para mostrar, nunca se le garantiza obtener números que se sumen a 100 a menos que tome precauciones especiales. Por ejemplo, redondear 33.33333, 33.33333 y 33.33333 te dejará un poco corto en la suma, por lo que lo lógico es modificar el porcentaje del mayor valor del conjunto para tener en cuenta cualquier diferencia.

Esta es una forma de hacerlo en Oracle SQL usando funciones analíticas y una cláusula de factorización de subconsultas (WITH) para generar datos de muestra.

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                     

En ms Access, puede usar la función SQL REDONDEAR (número, número de decimales), redondeará el número al número de decimales dado:

REDONDO ((100 * [TotalVisit1] / [TotalVisits]), 1) COMO Visit1percent

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top