Question

Comment puis-je convertir cela en décimal en SQL? Voici l'équation et la réponse est 78 (nombre entier), mais la vraie réponse est 78,6 (avec une décimale). Je dois donc l'indiquer, sinon le rapport ne totalisera pas 100%

(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
Était-ce utile?

La solution

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

Moche, mais ça marche.

Autres conseils

Essayez ceci:

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

Au moins dans MySQL (si cela peut aider), si vous voulez utiliser des nombres flottants, vous devez utiliser un champ float de type, pas les champs int ordinaires.

Ajoutez simplement un point décimal au 100

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

Cela force tout le traitement à se dérouler dans des flottants ... si vous voulez que la sortie finale soit textuelle et tronquée pour l'affichage à une seule décimale, utilisez la fonction Str

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


Pas moche et travailler mieux et rapidement, profitez-en!

C’est probablement excessif de le faire, mais vous pouvez envisager de transtyper toutes les valeurs en float pour assurer la précision à toutes les phases.

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

Remarque, vous devez vraiment insérer du code ici pour le cas où TotalVisits == 0 ou vous obtiendrez une réponse division par 0.

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

Cela retournera une décimale et le ROUND l'arrondira à un chiffre. Donc, dans votre cas, vous auriez 76,6. Si vous ne souhaitez pas que des chiffres changent le 1 en 0 et si vous voulez deux chiffres, changez le en 2.

Essayez avec ceci, pas de round and str ou Over (). J'ai trouvé cela comme un moyen plus simple de le faire.

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

Vous pouvez modifier le nombre de décimales à votre guise

.
  

par exemple. numérique (5,2) ou numérique (5,4)

Cela pourrait ne pas résoudre directement votre problème, mais lorsque vous arrondissez un ensemble de chiffres à afficher, vous ne serez jamais sûr d'obtenir des nombres qui ajoutent 100, à moins de prendre des précautions particulières. Par exemple, si vous arrondissez 33,33333, 33,33333 et 33,33333, la somme vous manque, il est donc logique de modifier le pourcentage de la plus grande valeur de l'ensemble pour tenir compte de toute différence.

Voici un moyen de le faire dans Oracle SQL en utilisant des fonctions analytiques et une clause de sous-requête de factorisation (WITH) pour générer des exemples de données.

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, vous pouvez utiliser la fonction SQL ROUND (nombre, nombre de décimales), elle arrondira le nombre au nombre de décimales donné:

ROUND ((100 * [[TotalVisit1] / [TotalVisits]]), 1) À LA VISITE1%,

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top