2

ストアド プロシージャの選択クエリに行カウンターを設定したいのですが、行ごとにカウンターがインクリメントされません。増分は、いずれかのフィールドの値に依存します。この無効なコードに相当するもの:

DECLARE @RowIndex as int
SET @RowIndex = 0
SELECT
   f1, f2, f3,
   CASE
      WHEN f1 > 3 THEN @RowIndex += 1
      ELSE @RowIndex
   END AS MyIndex
FROM
   MyTable

SQL Server 2005 でこれを行うにはどうすればよいですか?

4

2 に答える 2

1
SELECT f1,f2,f3, DENSE_RANK() OVER (ORDER BY tempf1)-1 AS myIndex
FROM
(
  SELECT f1, f2, f3, CASE WHEN f1>3 THEN f1 ELSE 0 END AS tempf1
  FROM
  MyTable
) AS A

上記のように f1 による順序で Dense_Rank() を使用してください。これを試して。

于 2012-02-28T16:38:39.813 に答える
0

単一のクエリでこれを行うには、テーブルをそれ自体に結合して、基準を満たす数または前の行を取得する必要があります。また、テーブルを並べる列が必ず必要です。この場合、その列を f2 と呼びましょう。

SELECT a.f1, a.f2, a.f3
    , SUM(CASE WHEN b.f1 > 3 THEN 1 ELSE 0 END) AS MyIndex
FROM MyTable a
JOIN MyTable b
    ON a.f2 >= b.f2
GROUP BY a.f1, a.f2, a.f3
于 2012-02-28T16:42:44.630 に答える