2012-02-28 18 views
1

ストアドプロシージャの選択クエリで行カウンタを使用したいと考えていますが、カウンタは各行に対してインクリメントされません。インクリメントはフィールドの1つの値に依存します。この無効なコードに相当するもの:SQL Server 2005 - 選択クエリのカウンタ

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ではどうすればよいですか?

答えて

0

これを1回のクエリで実行するには、条件を満たす番号または前の行を取得するために、テーブルに自身を戻す必要があります。また、あなたは間違いなくテーブルを注文する列が必要です。この場合は、その列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 
+0

私はそれを試みます。私はちょっと待って、他の提案が掲載されるかどうかを確認しています(私はあなたの作品が正しいと思っていますが、単純な解決策があると思っていました。ちなみに、私はすでにテーブルを注文する列を持っています。ありがとう! – ConnorsFan

+0

補遺:実際のクエリが私が与えた単純化された例よりもずっと複雑であるため、私はより簡単な解決法を希望します。 – ConnorsFan

+0

サンプルデータを共有するために気をつけてください。これは、これが動作する場所を考えることができないためです。それを参照してください[ここでは動作しません](http://data.stackexchange.com/stackoverflow/query/62678/sample-for-9485858-which-doesnt-work) –

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()を使用してください。これを試して。

+0

-1:これを実行できませんでした。あなたはそれを試しましたか? –

+0

私は試みて、SQL Serverは、クエリが有効ではないと言います。私の主な問題は、クエリ内に値を割り当てることです。 CASE ... ENDステートメントがなくても、MyIndexとして@RowIndex = 5と言っても、クエリは無効になります。 – ConnorsFan

+0

私の条件(f1> 3)はどこに表示されますか? – ConnorsFan

関連する問題