201

を使用しROW_NUMBER()て取得したい...

  1. を取得するにはmax(ROW_NUMBER())--> または、これはすべての行の数でもあると思います

私はやってみました:

SELECT max(ROW_NUMBER() OVER(ORDER BY UserId)) FROM Users

しかし、それはうまくいかなかったようです...

  1. ROW_NUMBER()特定の情報を使用すること。名前があり、その名前がどの行から来たのか知りたい場合。

#1で試したものと似たものになると思います

SELECT ROW_NUMBER() OVER(ORDER BY UserId) From Users WHERE UserName='Joe'

しかし、これもうまくいきませんでした...

何か案は?

4

13 に答える 13

168

最初の質問については、単に使用しないのはなぜですか?

SELECT COUNT(*) FROM myTable 

カウントを取得します。

2 番目の質問では、行の主キーは、特定の行を識別するために何を使用する必要があるかです。そのために行番号を使用しようとしないでください。


メインクエリで Row_Number() を返した場合、

SELECT ROW_NUMBER() OVER (Order by Id) AS RowNumber, Field1, Field2, Field3
FROM User

次に、5行前に戻りたい場合は、現在の行番号を取得し、次のクエリを使用して currentrow -5 で行を決定できます

SELECT us.Id
FROM (SELECT ROW_NUMBER() OVER (ORDER BY id) AS Row, Id
     FROM User ) us 
WHERE Row = CurrentRow - 5   
于 2009-06-07T01:55:20.827 に答える
51

count()行の総数を取得するために使用できる他の人に同意しますが、次のように使用できrow_count()ます。

  1. 行の総数を取得するには:

    with temp as (
        select row_number() over (order by id) as rownum
        from table_name 
    )
    select max(rownum) from temp
  2. name が Matt である行番号を取得するには:

    with temp as (
        select name, row_number() over (order by id) as rownum
        from table_name
    )
    select rownum from temp where name like 'Matt'

さらにmin(rownum)orを使用max(rownum)して、それぞれマットの最初または最後の行を取得できます。

これらは の非常に単純な実装でしrow_number()た。より複雑なグループ化に使用できます。サブクエリを使用しない高度なグループ化に関する私の回答を確認してください

于 2009-06-09T09:52:46.690 に答える
26

テーブルの合計行数を返す必要がある場合は、SELECT COUNT(*)ステートメントの別の方法を使用できます。

全表スキャンを実行して行数を返すためSELECT COUNT(*)、大きな表の場合は非常に長い時間がかかる可能性があります。sysindexesこの場合、代わりにシステムテーブルを使用できます。ROWSデータベース内の各テーブルの合計行数を含む列があります。次のselectステートメントを使用できます。

SELECT rows FROM sysindexes WHERE id = OBJECT_ID('table_name') AND indid < 2

これにより、クエリにかかる時間が大幅に短縮されます。

于 2009-06-07T07:06:41.297 に答える
3
SELECT num, UserName FROM 
 (SELECT UserName, ROW_NUMBER() OVER(ORDER BY UserId) AS num
  From Users) AS numbered
WHERE UserName='Joe'
于 2009-06-07T02:02:56.397 に答える