Vra

Hoe kan ek sit dit op 'n desimale in SQL? Hieronder is die vergelyking en ek kry die antwoord as 78 (integer) maar die werklike antwoord is 78,6 (met 'n desimale) so ek nodig het om dit te wys as anders sal die verslag sal nie klop tot 100%

(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
Was dit nuttig?

Oplossing

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

Ugly, maar dit werk.

Ander wenke

Probeer die volgende:

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

Ten minste in MySQL (as dit help), as jy wil float getalle gebruik jy moes 'n tipe float veld, gebruik nie die gereelde int velde.

Voeg net 'n desimale om die 100

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

Hierdie dwing almal verwerking gebeur in dryf ... as jy die finale uitset as teks wil, en kapt vir mekaar om net een desimale plek, gebruik Str funksie

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

Nie lelik en beter en vinnig werk, geniet dit!

Die waarskynlik overkill om dit te doen, maar jy kan wens om te oorweeg beslissende alle waardes tot dryf om akkuraatheid te verseker ten alle fases.

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

Let wel, eintlik moet jy kode in hier vir die geval dat == 0 TotalVisits of jy sal 'n verlossing te kry deur 0 antwoord sit.

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

Dit sal 'n desimale terugkeer en die ronde sal dit rond een syfer. So in jou geval jy sou kry 76,6. As jy nie wil hê enige syfers verander die 1-0 en as jy wil twee syfers verander dit na 2.

Probeer met hierdie, geen ronde en str of oor (). Ek het gevind dat hierdie as 'n eenvoudiger manier om dit te doen.

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

Jy kan die aantal desimale punte te verander as jy wil

  

Bv. numeriese (5,2) of numeriese (5,4)

Dit kan nie spreek jy direk uit te reik, maar wanneer jy 'n stel getalle te rond vir die vertoning wat jy nooit gewaarborg om getalle wat voeg tot 100 tensy jy spesiale voorsorgmaatreëls te tref nie. Byvoorbeeld, afronding 33,33333, 33,33333 en 33,33333 gaan jy laat een kort op die bedrag, so die logiese ding om te doen is om die persentasie vir die grootste waarde in die stel om as gevolg van 'n verskil te neem te verander.

Hier is 'n manier om dit te doen in Oracle SQL met behulp van analitiese funksies en 'n subquery factoring (MET) klousule te monster data te genereer.

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                     

In MS Access Jy kan die SQL funksie ROUND (aantal, aantal desimale) gebruik, sal dit die aantal rond na die gegewe aantal desimale:

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

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top