Domanda

Come posso convertirlo in un decimale in SQL? Di seguito è riportata l'equazione e ottengo la risposta come 78 (numero intero) ma la risposta reale è 78,6 (con un decimale), quindi devo mostrarlo poiché altrimenti il ??rapporto non raggiungerà il 100%

(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
È stato utile?

Soluzione

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

Brutto, ma funziona.

Altri suggerimenti

Prova questo:

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

Almeno in MySQL (se aiuta), se vuoi usare numeri float devi usare un campo float di tipo, non i normali campi int.

Basta aggiungere un decimale al 100

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

questo impone che tutta l'elaborazione avvenga in float ... se vuoi l'output finale come testo e troncato per la visualizzazione con un solo decimale, usa la funzione Str

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


Non brutto e funziona meglio e velocemente, divertiti!

Probabilmente è eccessivo farlo, ma potresti voler considerare di lanciare tutti i valori su float per garantire l'accuratezza in tutte le fasi.

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

Nota, devi davvero inserire il codice qui nel caso in cui TotalVisits == 0 o otterrai una divisione per 0 risposte.

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

Questo restituirà un decimale e il ROUND lo arrotonderà a una cifra. Quindi nel tuo caso otterrai 76.6. Se non si desidera alcuna cifra, modificare 1 su 0 e se si desidera due cifre, modificarlo in 2.

Prova con questo, senza round e str o Over (). ho trovato questo come un modo più semplice per farlo.

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

Puoi modificare il numero di punti decimali come desideri

  

es. numerico (5,2) o numerico (5,4)

Potrebbe non essere possibile risolvere direttamente il problema, ma quando si arrotonda una serie di numeri per la visualizzazione, non si è mai sicuri di ottenere numeri che aggiungono a 100 a meno che non si prendano precauzioni speciali. Ad esempio, l'arrotondamento di 33.33333, 33.33333 e 33.33333 ti lascerà uno short sulla somma, quindi la cosa logica da fare è modificare la percentuale per il valore più grande nell'insieme per tener conto di qualsiasi differenza.

Ecco un modo per farlo in Oracle SQL usando funzioni analitiche e una clausola factoring subquery (WITH) per generare dati di esempio.

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 Puoi usare la funzione SQL ROUND (numero, numero di decimali), arrotonderà il numero al numero di decimali dato:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top