2

select ステートメントを使用して、3661 レコード テーブルから 10% を取得したいと考えています。しかし、私は 367 レコードを取得しますが、366 レコードだけが必要です。しかし、50% を入れると、1830 レコードではなく、1831 レコードを取得したいと考えています。ここに私が使用するステートメントがあります:

SELECT top 10 percent *
FROM table_a
4

2 に答える 2

9

残念ながら、それが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

于 2013-02-07T16:05:21.877 に答える
0

SQL Server 2012のTOPのMSDN ページからの PERCENT 引数の説明を次に示します。

クエリが結果セットから行の最初の式パーセントのみを返すことを示します。小数値は、次の整数値に切り上げられます。

ただし、SQL Server 2005 バージョンの TOP ページには、端数の切り上げに関する 2 番目の文が含まれていません。動作は同じであると思います (部分的にあなたの事例証拠に基づいています)。MSDN は、人々が動作について尋ねたり苦情を言ったりしたため、それを追加しました。

于 2013-02-07T16:09:30.960 に答える