2017-06-26 11 views
0

ご協力いただきありがとうございます。基本的に私は小数点以下の結果を得ていないよ。ここに は私のコードです:SQL:キャストしようとしても正確な結果を返さないディビジョン

removed 6 46 0.00 
removed 5 11 0.00 
removed 5 20 0.00 
removed 4 26 0.00 
removed 4 28 0.00 
removed 4 6 0.00 
removed 4 32 0.00 
removed 2 2 1.00 
removed 1 1 1.00 

[データ結果] [1]::!https://i.stack.imgur.com/IZrgI.pngここ

select 
practitioner_id, 
count([Number of Acorns Used]) as [Surveys Used], 
count(patid) as [Number of Clients], 
cast(count(cast ([Number of Acorns Used] as float))/ 
count(cast (patid as float)) as decimal(10,2)) as [Survey Use Rate] 
from #Results 
group by practitioner_id 
order by count([Number of Acorns Used]) desc 

は、いくつかの部分的な結果(practitioner_idが削除された)です

+0

データ型floatを使用しようとしましたか? –

+1

SQLタグを追加すると、使用する特定のDBMSのタグを追加することを提案するかなり大きな赤いボックスが表示されました。これらの機能と構文が異なるためです。その提案を無視する理由がありますか?それは理由のためにあります - あなただけでなく、より迅速に答えを得るが、それはあなたが何か他のものを使用しているため、あなたのために働いていないことを見つけるために1つのDBMSの答えを書く人々の時間を浪費するのを避ける。 –

+0

もし可能であれば、いくつかのサンプルデータをSQLFiddleなどにダンプし、結果を期待どおりに表示してください。 – Shawn

答えて

0

Floatは、正確な数値データ型ではありません。だから時々あなたに結果を少しばかり与えるでしょう。代わりにdecimal(7,2)を使用してください。またはあなたの番号に合っている必要があるものは何でも。 https://docs.microsoft.com/en-us/sql/t-sql/data-types/numeric-types

+0

SQL Serverのドキュメントを引用すると、ポスターがSQL Serverを使用していることが示されている場合にのみ関連します。 –

+0

真。私はその銃に飛び乗った。しかし、そのリンクは、いくつかの主要言語に適用される数値データ型に関するかなり一般的な情報を提供します。 – Shawn

+0

ms sql server以外の属性名の前後に[]を使用するRDBMSはありますか? –

2

小数点の結果が得られない理由は、count()の出力がintであるため、キャストをcount()関数の外に移動したいからです。

select 
practitioner_id, 
count([Number of Acorns Used]) as [Surveys Used], 
count(patid) as [Number of Clients], 
cast(count([Number of Acorns Used]) as decimal(10,2))/ 
cast(count(patid) as decimal(10,2)) 
    as [Survey Use Rate] 
from #Results 
group by practitioner_id 
order by count([Number of Acorns Used]) desc 
+0

優れたポイント。 SQLを使って作業するときは、作業している数値の種類や、その種類の制限と「癖」を知ることが常に重要です。ときどき1/1.xは0.yの代わりに1を与えます。 – Shawn

0

あなたは間違った場所にキャストしています。たとえば、この結果は整数です。

count(cast ([Number of Acorns Used] as float))です。

cast(count([Number of Acorns Used]) as DECIMAL(19,6)に変更してください。

独自の列を選択するだけで確認できます。

私もそう完全な表現のためにこれを試してみてください(不正確であると非常に限られた実用的な用途を有する)浮きませ

小数点を使用することをお勧め:

cast(count([Number of Acorns Used]) as DECIMAL(19,6)) 
/
cast(count(patid) as decimal(10,2)) as [Survey Use Rate] 

事がある....私はwouldn DISTINCTを使用していない限り、それらのカウントが異なる数値を返すと期待していません。しかし、私はこれがどのようなSQLの型か分かりません。

+0

ありがとうございます。この問題が修正されました。 – sherrybay

0

基本的な問題は、データベース(おそらくSQL Server)が整数除算を行うことです。したがって、2つの整数を除算すると、結果は整数になります。あなたは好きなものにキャストすることができますが、プロセスは3/2 - > 1 - > 1.00です。

I除算を行うには1.0によって通常は複数の値:他の人が指摘したように

select practitioner_id, 
     count([Number of Acorns Used]) as [Surveys Used], 
     count(patid) as [Number of Clients], 
     (count([Number of Acorns Used]) * 1.0/
     count(patid) 
     ) as [Survey Use Rate] 
from #Results r 
group by practitioner_id 
order by [Surveys Used] desc; 

、フロートをカウントして整数を数え、または文字列を数え、または日付を数えると同じです。 count()は常に整数を返します。

関連する問題