10

Overshipment列のパーセンテージを表示したいと思います。

私のサンプルクエリ

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 

テーブル名-CSPGI09_OVERSHIPMENT

私の公式:

-------------------------------------------------------
SPGI09_EARLY_OVER_T – (SPGI09_OVER_WK_EARLY_ADJUST_T)
-------------------------------------------------------
SPGI09_EARLY_OVER_T + SPGR99_LATE_CM_T  + SPGR99_ON_TIME_Q

結果を%で表示したいのですが、たとえば66.57%

SQLSERVER2008を使用しています

4

2 に答える 2

16

これらの列がすべてであると仮定するとint、最初に整理するのは、1つ以上の列をより適切なデータ型に変換することです。int除算は切り捨てを実行するため、100%未満の場合は結果が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 

100.0ここでは、計算結果をfloatsではなくsで強制的に実行する数値の1つを乗算しましたint。を選択すること100で、として扱う準備もできています%

私もあなたの括弧に少し混乱しました-私はそれが正しいと思います-しかしあなたは単一の値の周りに括弧を持っていました、そして他の場所ではあなたは同じレベルの演算子(-と)の組み合わせを持っていたので頼っていました/どの演算子が最初に適用されるかを定義する優先順位ルールについて。

于 2012-11-19T11:13:25.267 に答える
2

このようなものを試してください

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

値はパーセンテージで表されていると思います。有効なパーセンテージの合計に変換されない場合は、%記号を追加して、列をvarcharに変換します。

于 2012-11-19T11:08:28.330 に答える