2012-01-05 9 views
6

レコードの行番号の検索方法は?

ProductDetailNo ProductDescription 
     224    Apples 
     225    Tomatoes 
     226    Potatoes 

どのように私は以下のように選択した行の行番号をリストしていますか?以下の例のテーブルを考えてみましょうか

RowNo ProductDetailNo   Product Description 
    2   225    Tomatoes 

クエリでrow_number()を使用すると、常に1つのレコードに対して1が返されます。論理行はデータベースに何もありません。

ありがとう、ダミアン。

+0

ROW_NUMBERをチェックし、クエリや数字、それらの結果を取り下さい。クエリに1行しか返されていない場合、row_number()は常に1になります。http://msdn.microsoft.com/en-us/library/ms186734.aspx –

+0

Brandonの情報をありがとうございますが、方法が必要です。 –

+0

There方法です。照会された表に一意の鍵を追加(または使用)し、その固有の鍵を使用して結果を逆参照します。 ProductDetailNoが一意の場合は、それをバックリファレンスとして使用することもできます。 –

答えて

10

は、あなたが受け取る行番号が結果の行数からあるこの

WITH MyTable AS 
(
    SELECT ProductDetailNo, ProductDescription, 
    ROW_NUMBER() OVER (ORDER BY ProductDetailNo) AS 'RowNumber' 
    FROM Product 
) 
SELECT RowNumber, ProductDetailNo  
FROM MyTable 
WHERE ProductDetailNo = 225 
+0

ちょっとうまく動かない –

+1

これを試してください。これは1行だけを返し、最後の列を含むRownumberは、データに行番号を表示します –

+0

指定してください。 –

0

を試してみてください。つまり、結果に1つのタプルがある場合は、行番号は1です。

テーブル全体の行番号を取得するには、テーブルに自動インクリメントのRowNoという特別な属性を追加する必要があります。

これは役に立ちますが、おそらくSQLにはさらに優れたソリューションがあります。

+0

ありがとうVinyakはdownvoteが何であったのかわからないが、私はまだいくつかのSQLの魔法を期待している=) –

2

これはどうなりますか?

SELECT RowNo, ProductDetailNo, ProductDescription 
FROM (SELECT ROW_NUMBER() as RowNo, ProductDetailNo, ProductDescription 
     FROM TheTable) as t 
WHERE ProductDetailNo = 225; 
+0

それは素晴らしいですが、内側のクエリはテーブルのすべての行に対して実行されます。別の解決策がありますか? –

+1

さて、番号を付けるためには、それらすべてを知る必要があります。それは今のところあなたの質問のための最善の解決策です。 –

+1

もちろん、 'ROW_NUMBER()'によって返される値は、 'ORDER BY'も与えられていないこのクエリの実行ごとに異なっていてもかまいません。 –

2

表の行には固有の行番号はありません。 ROW_NUMBER()は、特定の結果セット内の行の番号のみを表示します。したがって、結果セットに1レコードしか含まれていない場合、常に1が得られると予想されます。行番号が必要な場合は、テーブルスキーマに自動インクリメントのIDENTITY列が含まれている必要があります。

+1

ちょっとボビー、SQLの方法があります。 –

3

()この

WITH ArticleSearch AS 
    (
     SELECT 
      ROW_NUMBER() OVER 
       (
        ORDER BY tblProducts.ProductDetailNo          
       ) AS RowNumber, 
      tblProducts.ProductDetailNo, 
      tblProducts.ProductDescription  
     FROM   
      tblProducts 
    ) 

    SELECT 
     a.RowNumber AS SlNo, 
     a.ProductDetailNo, 
     a.ProductDescription 
    FROM 
      ArticleSearch a 
    WHERE 
      a.ProductDetailNo=225 
+0

内側の選択はすべてのレコードに対して実行されるでしょうか? –

2
WITH productCTE 
    AS 
    (SELECT ROW_NUMBER() OVER(ORDER BY ProductDetailNo, ProductDescription) AS RowNo, ProductDetailNo, ProductDescription 
    FROM tbl_Products 
) 
    SELECT * FROM productCTE 
    WHERE RowNo = 2 
関連する問題