これが私のSQLステートメントです
SELECT ROUND(AVG(column_name), 100)
FROM [database].[dbo].[table]
私が取得する答えは、908行3
の間の可能な数の範囲です。1 - 5
私はそれを言う必要があり3.0
ます3.09
。これは可能ですか?
これが私のSQLステートメントです
SELECT ROUND(AVG(column_name), 100)
FROM [database].[dbo].[table]
私が取得する答えは、908行3
の間の可能な数の範囲です。1 - 5
私はそれを言う必要があり3.0
ます3.09
。これは可能ですか?
平均は値と同じデータ型になるため、値をキャストします。
SELECT ROUND(AVG(CAST(column_name AS FLOAT)), 2) FROM [database].[dbo].[table]
これが頭蓋骨マニアに役立つかどうかはわかりませんが、これを試してください
SELECT CAST(AVG(CAST(column_name as DECIMAL(10,2))) AS DECIMAL(10,2))FROM [table_name]
浮動小数点数は概算です。一方、小数はより正確になります。浮動小数点数と小数を読み上げることをお勧めします。私は最初これに苦労しましたが、それでも時々道に迷っています。うまくいけば、これはあなたを助けるでしょう。
C#では、ここに回答を投稿するのに問題が発生する可能性があるかどうかはわかりませんが、それをdoubleに変換して、ExecuteScalar()
これを試して:
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection conn= sqlconnectionstring;
SqlCommand cmd = new SQLCommand("SELECT STATEMENT",conn);
cmd.CommandType = CommandType.Text;
conn.Open();
Double result = Convert.ToDouble(cmd.ExecuteScalar());
lblresult.text = "the result is " + result;
conn.Dispose();
cmd.Dispose();
}
本当に、そこでする必要さえありませROUND
ん。DECIMAL
次のように、値をに変換できます。
SELECT AVG(CONVERT(DECIMAL(16,2),YourColumn))
FROM YourTable
あなたが何を求めているのか完全にはわかりませんが、あなたはさらに正確に番号を返してもらいたいと思っていると思います。
呼び出しをROUND関数でラップしていますが、列のデータ型の精度が0より大きい場合(intなど)は、最初にデータを別の型にキャストまたは変換する必要があります。
データをさまざまなタイプにキャストするいくつかの方法を示すいくつかの例を次に示します。
SELECT CAST(100 AS decimal(5, 2)) -- Gives you "100.00"
,CAST(100 AS float) --<== Gives you "100"
,CAST(100.0 AS float) --<== Gives you "100"
,CAST(100.01 AS float) --<== Gives you "100.01"
また、MSDN:データ型(Transact-SQL)も確認してください。
CAST(AVG(column_name) AS DECIMAL(5, 2))
100は100.00、100.05は100.05と表示されます