2

SQL Server 2008 を使用しています。

x行のテーブルがあります。常に x を 5 で割り、3 番目のレコード グループを選択したいと思います。

テーブルに 100 個のレコードがあるとします。

100 / 5 = 20

3 番目のセグメントはレコード 41 から 60 になります。

SQL でこの 3 番目のセグメントのみを計算して選択するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

2

使用できますNTILE

順序付きパーティション内の行を指定された数のグループに分散します。

例:

SELECT col1, col2, ..., coln
FROM
(
    SELECT
        col1, col2, ..., coln,
        NTILE(5) OVER (ORDER BY id) AS groupno
    FROM yourtable
)
WHERE groupno = 3
于 2012-06-13T06:56:30.337 に答える
1

NTILEこれは、ランキング機能の完璧な使用法です。

基本的に、CTE内でクエリを定義し、行にNTILEを追加します。1からnまでの数値(への引数NTILE)。行を列ごとに並べ替えると、探している行のnグループが取得され、これらのデータの「グループ」のいずれかを操作できます。

したがって、次のようなものを試してください。

;WITH SegmentedData AS
(
   SELECT  
      (list of your columns),
      GroupNo = NTILE(5) OVER (ORDER BY SomeColumnOfYours)
   FROM dbo.YourTable
)
SELECT * 
FROM SegmentedData
WHERE GroupNo = 3

もちろん、UPDATECTEの後にステートメントを使用して、これらの行を更新することもできます。

于 2012-06-13T06:58:16.583 に答える