Frage

Wie konvertiere ich diese in eine Dezimalzahl, die in SQL?Unten ist die Gleichung, und ich die Antwort bekommen, 78 (integer), aber die wirkliche Antwort ist 78.6 (mit einer Dezimalstelle), so brauche ich, um dies zu zeigen, da sonst die Bericht wird nicht tally up to 100%

(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
War es hilfreich?

Lösung

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

Hässlich, aber es funktioniert.

Andere Tipps

Versuchen Sie folgendes:

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

Mindestens in MySQL (wenn es hilft), wenn Sie Float-Zahlen verwenden möchten, Sie hatten einen Typ float Feld zu verwenden, nicht die regulären int Felder aus.

Fügen Sie einfach eine Dezimalzahl in der 100

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

Dies zwingt die gesamte Verarbeitung in Schwimmern passieren ... wenn Sie die endgültige Ausgabe als Text mögen, und abgeschnittene für die Anzeige nur eine Dezimalstelle, verwendet Str Funktion

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


Nicht hässlich und Arbeit besser und schneller, genießen Sie es!

Es ist wahrscheinlich übertrieben, dies zu tun, aber Sie können alle Werte betrachten wollen Gießen schwimmt Genauigkeit in allen Phasen zu gewährleisten.

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

Beachten Sie, die Sie wirklich brauchen Code für den Fall hier zu setzen, die TotalVisits == 0, oder Sie werden eine Division durch 0 Antwort.

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

Dies wird eine Dezimalzahl zurückzukehren und die Runde wird es auf eine Stelle abzurunden. Also in Ihrem Fall würden Sie 76,6 erhalten. Wenn Sie nicht möchten, dass alle Ziffern stellen die 1 auf 0 geändert werden, und wenn Sie zwei Ziffern wollen es 2. ändern

Versuchen Sie es mit diesem, nicht rund und str oder Over (). Ich fand diese als einfacher Weg, es zu tun.

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

Sie können die Anzahl der Dezimalstellen ändern, wie Sie wünschen

  

z. numeric (5,2) oder numerisch (5,4)

Dies könnte nicht auf Sie direkt, aber wenn Sie Runde einen Satz von zahlen für die Anzeige Sie sind nie garantiert, um erhalten Sie zahlen, die zu 100 sofern Sie Besondere Vorsichtsmaßnahmen ergreifen.Für Beispiel, Rundung 33.33333, 33.33333 und 33.33333 ist, lassen Sie einmal kurz auf die Summe, also die logische Sache zu tun ist, ändern Sie den Prozentwert für den größten Wert in der Menge zu berücksichtigen Unterschied.

Hier ist ein Weg, das zu tun, in Oracle-SQL analytische Funktionen und eine subquery factoring (MIT) - Klausel zum generieren von Beispiel-Daten.

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 können Sie die SQL-Funktion ROUND nutzen (Anzahl, Anzahl der Nachkommastellen), rundet es die Zahl auf die angegebene Anzahl von Dezimalstellen:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top