web-dev-qa-db-ja.com

クエリで除算関数を使用する方法は?

積み過ぎ列の割合を表示したい。

私のサンプルクエリ

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%

SQL SERVER 2008を使用しています

8
Adalarasan_New

これらの列がすべて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 

ここでは、数字の1つを100.0これは、floatsではなくintsを使用して計算結果を強制的に実行します。 100、私はそれを%

私はあなたのブラケットに少し混乱しました-私はそれを正しいと思います-しかし、あなたは単一の値の周りにブラケットがあり、そして他の場所では演算子のミックスがありました(-および/)同じレベルで、どの演算子が最初に適用されるかを定義するために優先規則に依存していました。

14

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

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に変換します。

2
Kami