web-dev-qa-db-ja.com

テーブルからではなく、増分整数列を含むMSSQL Selectステートメント

可能であれば、任意のテーブルから値を返すt-sqlクエリが必要です。最初の行に値= 1、2番目の行に2などの増分整数列も返します。

この列は実際にはどのテーブルにも存在せず、厳密にインクリメンタルである必要があります。これは、ORDER BY句がテーブルの行をソートでき、常に完全な形のインクリメンタル行が必要になるためです...

前もって感謝します。

-編集申し訳ありませんが、SQL Server 2000で実行する必要があります。

34
Rodrigo

SQL 2005以降

SELECT ROW_NUMBER() OVER( ORDER BY SomeColumn ) AS 'rownumber',*
    FROM YourTable

2000年には、このようなことをする必要があります

SELECT IDENTITY(INT, 1,1) AS Rank ,VALUE
INTO #Ranks FROM YourTable WHERE 1=0

INSERT INTO #Ranks
SELECT SomeColumn  FROM YourTable
ORDER BY SomeColumn 

SELECT * FROM #Ranks
Order By Ranks

こちらもご覧ください 行番号

57
SQLMenace

カスタム番号から開始し、そこから増分できます。たとえば、実行可能な支払いごとに小切手番号を追加します。

select @StartChequeNumber = 3446;
SELECT 
((ROW_NUMBER() OVER(ORDER BY AnyColumn)) + @StartChequeNumber ) AS 'ChequeNumber'
,* FROM YourTable

各行に正しいチェック番号が付与されます。

4

ROW_NUMBER()を試してください

http://msdn.Microsoft.com/en-us/library/ms186734.aspx

例:

SELECT
  col1,
  col2,
  ROW_NUMBER() OVER (ORDER BY col1) AS rownum
FROM tbl
2
Misko

くてパフォーマンスが悪いですが、技術的には、少なくとも1つの一意のフィールドを持つすべてのテーブルで機能し、SQL 2000でも機能します。

SELECT (SELECT COUNT(*) FROM myTable T1 WHERE T1.UniqueField<=T2.UniqueField) as RowNum, T2.OtherField
FROM myTable T2
ORDER By T2.UniqueField

注:このアプローチを使用してWHERE句を外側のSELECTに追加する場合、数値を連続させたい場合も内側のSELECTに追加する必要があります。

0
JohnFx