Je souhaite afficher le pourcentage de la colonne Overshipment.
Mon exemple de requête
select (SPGI09_EARLY_OVER_T – (SPGI09_OVER_WK_EARLY_ADJUST_T) / (SPGI09_EARLY_OVER_T + SPGR99_LATE_CM_T + SPGR99_ON_TIME_Q))
from
CSPGI09_OVERSHIPMENT
Nom de la table - CSPGI09_OVERSHIPMENT
Ma formule:
-------------------------------------------------------
SPGI09_EARLY_OVER_T – (SPGI09_OVER_WK_EARLY_ADJUST_T)
-------------------------------------------------------
SPGI09_EARLY_OVER_T + SPGR99_LATE_CM_T + SPGR99_ON_TIME_Q
et je veux afficher le résultat avec%, par exemple, 66,57%
J'utilise SQL SERVER 2008
En supposant que toutes ces colonnes sont int
, la première chose à trier est de convertir une ou plusieurs d'entre elles en un meilleur type de données - int
la division effectue la troncature, donc tout ce qui est inférieur à 100% serait vous donne un résultat de 0:
select (100.0 * (SPGI09_EARLY_OVER_T – SPGI09_OVER_WK_EARLY_ADJUST_T)) / (SPGI09_EARLY_OVER_T + SPGR99_LATE_CM_T + SPGR99_ON_TIME_Q)
from
CSPGI09_OVERSHIPMENT
Ici, j'ai multiplié l'un des nombres par 100.0
qui forcera le résultat du calcul à être fait avec float
s plutôt qu'avec int
s. En choisissant 100
, Je le prépare également pour être traité comme %
.
J'ai également été un peu dérouté par votre bracketing - je pense que j'ai raison - mais vous aviez des crochets autour de valeurs uniques, puis à d'autres endroits, vous aviez un mélange d'opérateurs (-
et /
) au même niveau, et s'appuyaient donc sur les règles de priorité pour définir quel opérateur appliquer en premier.
Essayez quelque chose comme ça
select Cast((SPGI09_EARLY_OVER_T – (SPGI09_OVER_WK_EARLY_ADJUST_T) / (SPGI09_EARLY_OVER_T + SPGR99_LATE_CM_T + SPGR99_ON_TIME_Q)) as varchar(20) + '%' as percentageAmount
from CSPGI09_OVERSHIPMENT
Je suppose que la valeur est une représentation en pourcentage - sinon la convertir en un pourcentage total valide, puis ajoutez le signe% et convertissez la colonne en varchar.