select ステートメントを使用して、3661 レコード テーブルから 10% を取得したいと考えています。しかし、私は 367 レコードを取得しますが、366 レコードだけが必要です。しかし、50% を入れると、1830 レコードではなく、1831 レコードを取得したいと考えています。ここに私が使用するステートメントがあります:
SELECT top 10 percent *
FROM table_a
select ステートメントを使用して、3661 レコード テーブルから 10% を取得したいと考えています。しかし、私は 367 レコードを取得しますが、366 レコードだけが必要です。しかし、50% を入れると、1830 レコードではなく、1831 レコードを取得したいと考えています。ここに私が使用するステートメントがあります:
SELECT top 10 percent *
FROM table_a
残念ながら、それがTOP x PERCENT
条項の仕組みです(関連部分が強調表示されています)。
パーセント
クエリが結果セットの行の最初の式のパーセントのみを返すことを示します。小数値は次の整数値に切り上げられます。
別の丸めスキームが必要な場合は、自分で計算を行う必要があります。
SELECT TOP (SELECT COUNT(*) / 10 FROM table_a) * FROM table_a
これは整数除算を使用し、小数部を切り捨てます。つまり、切り捨てられます。
3661の50%で1831を生成する必要があるため、関数を使用して取得する「切り上げ」が必要だと思います。ROUND
SELECT TOP (SELECT CONVERT(int, ROUND(COUNT(*) / 10.0, 0)) FROM table_a) * FROM table_a
整数除算の代わりに浮動小数点除算を強制するには、10.0
の代わりにが必要であることに注意してください。10
SQL Server 2012のTOPのMSDN ページからの PERCENT 引数の説明を次に示します。
クエリが結果セットから行の最初の式パーセントのみを返すことを示します。小数値は、次の整数値に切り上げられます。
ただし、SQL Server 2005 バージョンの TOP ページには、端数の切り上げに関する 2 番目の文が含まれていません。動作は同じであると思います (部分的にあなたの事例証拠に基づいています)。MSDN は、人々が動作について尋ねたり苦情を言ったりしたため、それを追加しました。