12

SQLテーブルに2つのbit型列があり、その値は次のようになります。

FirstHalfLeave         SecondHalfLeave
 ------------           -------------
      0                      1
      1                      1

これらの2つのフィールドを合計して、1日残す必要があり、正確な結果を表示する必要があります(3/2=1.5)

私はこれらbitinteger好きに変換しました

sum(CAST(StaffAttendance.FirstHalfStatus as Integer) + 
             CAST(StaffAttendance.SecondHalfStatus as integer))/2 as TotalLeave

結果が表示され1ないので1.5、このためにダブルまたはフロートにキャストする必要があると思います。これを行う方法がわかりません。誰かがここで私を助けてくれますか、事前に感謝します

4

5 に答える 5

16

代わりに使用/2.0して、10 進数型を強制します

編集:

にキャストされた末尾のゼロを削除するにはfloat)そして、私はあなたが間違って配置したと思います。試す:

select cast(
           sum(
                 (
                   CAST(StaffAttendance.FirstHalfStatus as Integer) + 
                   CAST(StaffAttendance.SecondHalfStatus as integer)
                 ) 
                 / 2.0
           ) as float
       ) as TotalLeave
from your_table
于 2012-05-18T12:52:58.517 に答える
6

double に変換する最も簡単な方法は、次のように 1.0 を掛けることです。

   1.0 * (sum(CAST(StaffAttendance.FirstHalfStatus as Integer) + 
         CAST(StaffAttendance.SecondHalfStatus as integer)))/2 as TotalLeave
于 2012-05-18T12:52:52.463 に答える
3

で割る2.0か、掛け0.5ます。

于 2012-05-18T12:53:55.303 に答える
2

int の代わりにビット列と float をキャストしてみましたか?

sum(CAST(StaffAttendance.FirstHalfStatus as float) + 
             CAST(StaffAttendance.SecondHalfStatus as float))/2 as TotalLeave
于 2012-05-18T12:54:20.367 に答える
1

試す

 Sum(Case Cast(FirstHalfLeave + SecondHalfLeave as Numeric)) / Count(*)
于 2012-05-18T12:54:49.383 に答える