ROW_NUMBER()
の開始を3258170
ではなく1
として定義したい。
私は次のSQLクエリを使用しています
SELECT ROW_NUMBER() over(order by (select 3258170)) as 'idd'.
ただし、上記のクエリは機能しません。動作しないと言うときは、その実行は意味しますが、3258170
からは開始しません。誰か助けてくれますか?
行番号を指定する理由は、あるテーブルから別のテーブルに行を挿入しているためです。最初のテーブルでは、最後のレコードの行番号は3258169
であり、新しいレコードを挿入するときには、3258170
の行番号を取得する必要があります。
row_number()
の結果に値を追加するだけです:
_select 3258170 - 1 + row_number() over (order by (select NULL)) as idd
_
row_number()
の_order by
_句は、並べ替えに使用される列を指定しています。そこで定数を指定することで、単に「すべてが順序付けの目的で同じ値を持っている」と言っています。最初に選択した値とは何の関係もありません。
混乱を避けるために、定数値をNULLに置き換えました。 SQL Serverでは、observedがあります。これは実際に行をソートせずに連続番号を割り当てます-観察されたパフォーマンス上の利点ですが、文書化されたものではないため、それに依存することはできません。
これは簡単だと思う
ROW_NUMBER() OVER(ORDER BY Field) - 1 AS FieldAlias (To start from 0)
ROW_NUMBER() OVER(ORDER BY Field) + 3258169 AS FieldAlias (To start from 3258170)
時々....
ROW_NUMBER()は、特に基になるデータセットにレコードが重複している可能性がある場合(JOINクエリなど)に最適なソリューションではない場合があります。これにより、予想よりも多くの行が返される場合があります。 SEQUENCEの作成を検討できます。これは、場合によってはよりクリーンなソリューションと見なすことができます。すなわち:
CREATE SEQUENCE myRowNumberId
START WITH 1
INCREMENT BY 1
GO
SELECT NEXT VALUE FOR myRowNumberId AS 'idd' -- your query
GO
DROP SEQUENCE myRowNumberId; -- just to clean-up after ourselves
GO
欠点は、DISTINCT、WINDOW関数などを使用した複雑なクエリでシーケンスを使用するのが難しい場合があることです。完全なシーケンスのドキュメントを参照してください here .