2013-11-27 20 views
23

私は単純なselect文を持っています。私は結果セットの行に番号を付ける一時的な列を追加したいと思います。私はこれを試しました -SQLクエリの結果セットに行番号を追加します。

declare @num int 
set @num = 0; 
select t.A, t.B, t.C, (@count + 1) as number 
from tableZ as t 

すべての行に1を割り当てます。私は@count = @count + 1を試してみましたが、うまくいきませんでした。 これを簡単な方法で行うにはどうすればよいですか?

ありがとうございました。

+0

行番号をどのように増やしたいですか?任意?あなたのクエリにはORDER BYがありません。そのため、注文するものを定義する必要があります。 –

+0

@AaronBertrand - 私は行の番号が必要です。注文は本当に必要ではありません。それはあなたの質問に答えますか? –

+0

あなたは順序が無作為に適用されても問題ありません。その結果は毎回矛盾した順序でクエリに吐き出されますか? –

答えて

34

次のように典型的なパターンは次のようになりますが、あなたは(行の、順序付けられていない袋の表であるため、定義により、)実際には順序が適用されるべき方法を定義する必要があります。

SELECT t.A, t.B, t.C, number = ROW_NUMBER() OVER (ORDER BY t.A) 
    FROM dbo.tableZ AS t 
    ORDER BY t.A; 

わからないものをあなたの質問の変数は、(彼らは一致しない)表現することになっています。

39
SELECT 
    t.A, 
    t.B, 
    t.C, 
    ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS number 
FROM tableZ AS t 

もちろんat SQLFiddle

実施例を参照してください、あなたは行番号の順序を定義することをお勧めします - もしそうならば、単に通常のORDER BY句のように、例えば、のためOVER (ORDER BY t.C)OVER (ORDER BY (SELECT 1))を入れ替えます。