2016-09-08 11 views
1

%の計算を行うtsqlクエリがあり、結果が1より大きい場合は罰金が計算されますが、1未満の場合は0が返されます。 :私を与える計算を使用したTSQLクエリが1未満の値を返す

create table dbo.#temptable ( 
    total_sold int null, 
    #_in_ny int null, 
    percent_in_ny decimal(18,2)null 
) on [primary] 

insert into dbo.#temptable  
    select count(t.booknum) as totalsold, t.#_in_ny, 100 * t.#_in_ny/count(t.booknum) 
    from mytable t 

total ny sales %sales in ny 
650  4   0  ---- this should show up as 0.61 since 4 is .61% of 650 

答えて

3

問題は、SQL Serverが整数除算を実行することです。最も簡単な解決策は、定数として100.0を使用することです:

insert into dbo.#temptable  
    select count(t.booknum) as totalsold, t.#_in_ny, 
      t.#_in_ny * 100.0/count(t.booknum) 
    from mytable t 
+0

浮動小数点除算を行うために定数力のSQLサーバーで浮動小数点を使用していませんか? –

1

t.#_in_ny/count(t.booknum) - あなたはここで整数の除算を行っています。これらの両方を浮動小数点または小数に変換します。

insert into dbo.#temptable  
    select count(t.booknum) as totalsold, t.#_in_ny, 100 * CONVERT(float,t.#_in_ny)/CONVERT(float, count(t.booknum)) 
    from mytable t 

EDIT:だけでなくゴードンの回答を参照してください。いずれのソリューションも機能しますが、彼は確かに私のものよりも雄弁です。

+0

そうだね、あなたはとも働いたがゴードンのが簡単でした。あなたのために+1。ありがとう。 –

関連する問題