2

理解できない SQL クエリに問題があります。かみそりの構文で WebMatrix を使用しています。在庫テーブルにクエリを実行して、上位のムーバーの在庫数をパーセンテージで調べたいと考えています。

コードブロックには、次のものがあります。

var topmovers = db.QueryValue("select COUNT(STOCKCODE) from dbo.STOCK_ITEMS where STOCK_CLASSIFICATION = 170") ?? 0;   

var instock = db.QueryValue("select COUNT(STOCKCODE) from dbo.STOCK_ITEMS where STOCK_CLASSIFICATION = 170 and TOTALSTOCK > 0") ?? 0;   

var ofpc = instock/topmovers;`

それから体の中で、私は持っています

@ofpc.ToString("P2")

変数instocktopmovers. 100% や 0% ではなく、パーセンテージが必要です。

私が行けば、私@instock.ToString();は862を取得します

私が行けば、私@topmovers.ToString();は965を取得します

私の計算によると、862/965 は 0.8932 (89.32%) です。

ofpcただし、出力すると結果として0.00%になります@ofpc.ToString("P2")

明らかにどこか間違ってる…

4

1 に答える 1

3

整数除算を行う SQL Server でも同じ問題が発生するため、次のようになります。

select 1/2

常に 0 を返します。

したがって、値の 1 つを浮動小数点数にキャストする必要があります。次の表現を使用できますか。

var ofpc = cast(instock as float)/topmovers;

それとも似たようなもの?多分:

var ofpc = (instock*1.0)/topmovers

データベースが浮動小数点値を返すようにすることもできます。

var topmovers = db.QueryValue("select cast(COUNT(STOCKCODE) as float) from dbo.STOCK_ITEMS where STOCK_CLASSIFICATION = 170") ?? 0;`

私が行ったことは、最初のカウントを SQL 内のフロートに変換することです。間違いなくアプリケーション レベルでこれを行うことができますが、私は SQL に精通しています。これにより、topmovers変数は浮動小数点数になり、除算は浮動小数点除算になります。

于 2013-01-14T23:05:48.410 に答える