2008-12-30 9 views
11

Comment puis-je convertir cela en une décimale en SQL? Voici l'équation et je reçois la réponse que 78 (entier), mais la vraie réponse est 78,6 (avec une décimale), alors je dois montrer que sinon le rapport ne sera pas correspondre à 100%Comment calculer des pourcentages avec des décimales dans SQL?

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

Répondre

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

Laide, mais cela fonctionne.

+0

Merci, c'est celui qui est parti, car il a arrondi le nombre, les autres réponses ont toutes fonctionné aussi, bien que merci allouer tout le monde :) –

+2

J'ai trouvé il vaut mieux convertir en décimal que float. Certaines divisions fonctionnent mieux en mode décimal, au moins sur le serveur Microsoft SQL: SELECT 5555/CAST (1000 AS float), CAST (5555/CAST (1000 AS float) AS numérique (5, 2)), 5555/CAST (1000 AS décimal), CAST (5555/CAST (1000 AS décimal) AS Numérique (5, 2)) – user12861

1

Au moins en MySQL (si cela vous aide), si vous voulez utiliser des nombres flottants, vous devez utiliser un champ float de type, pas les champs int réguliers.

17

Essayez ceci:

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

Assurez-vous d'ajouter une mise en forme dans votre couche de présentation pour l'arrondir à 1 ou 2 décimales. Sinon, vous risquez de tomber sur des choses comme 33.33333 ... –

0

Son probablement surpuissant pour cela, mais vous pouvez envisager de jeter toutes les valeurs de flotteurs pour assurer l'exactitude à toutes les phases.

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

Remarque, vous avez vraiment besoin de mettre le code ici pour le cas où TotalVisits == 0 ou vous obtiendrez une division par 0 réponse.

1

Il suffit d'ajouter une décimale à 100

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

cela oblige tout le traitement se produire dans des flotteurs ... si vous voulez que la sortie finale sous forme de texte et tronqué pour l'affichage à une seule décimale, utilisez Str fonction

Str(100.0 * [TotalVisit1]/[TotalVisits], 4, 1) AS Visit1percent 
+0

Comme votre str réponse agréable et soignée recherche :) –

+0

Merci monsieur! ... heureux d'aider –

+0

ou merci mademoiselle;) –

-1

Cela pourrait ne pas vous adresser question directement, mais quand vous autour d'un ensemble de nombres pour l'affichage que vous n'êtes jamais garanti d'obtenir des chiffres qui ajoutent à 100 sauf si vous prenez des précautions particulières. Par exemple, arrondir 33,33333, 33,33333 et 33,33333 va vous laisser un court sur la somme, donc la chose logique à faire est de modifier le pourcentage de la plus grande valeur de l'ensemble pour tenir compte de toute différence.

Voici une façon de le faire dans Oracle SQL en utilisant des fonctions analytiques et une clause de sous-requête d'affacturage (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      
+0

C'est une mauvaise idée en général. Si les chiffres ne s'ajoutent pas à 100 en raison de l'arrondissement, alors c'est comme ça. Se faufiler avec eux va juste donner des résultats moins précis. – user12861

+0

Ce n'est ni une bonne ni une mauvaise idée, et les généralités n'y entrent pas. C'est juste une technique pour atteindre une exigence hypothétique spécifique. –

+0

C'est vrai, mais c'est une mauvaise exigence. Cela conduit à des données incorrectement affichées. Et cela ne répond pas à la question posée plus haut. Et ce n'est pas la solution la plus précise pour ajouter 100% aux pourcentages, bien que ce soit peut-être le plus simple. – user12861

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

Cela renverra une décimale et la ronde arrondit à un chiffre. Donc, dans votre cas, vous obtiendrez 76,6. Si vous ne voulez aucun chiffre changez le 1 à 0 et si vous voulez deux chiffres changez le à 2.

-1

En ms Access Vous pouvez utiliser la fonction SQL ROUND (nombre, nombre de décimales), il arrondira le nombre au nombre donné de décimales:

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

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


pas laid et mieux travailler et rapide, profitez il!

0

Essayez avec ceci, pas rond et str ou Over(). J'ai trouvé cela comme une façon 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 que vous souhaitez

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

Questions connexes