SQL Server中row_number改ページで調べた用法の詳細


ROW_NUMBER()関数は、SELECT文に対して返される各行を、1から番号付けし、その連続番号を付与する。照会時に並べ替え基準を適用した後は、ROW_を使用して順番が一致していることを確認できるのは番号だけです。NUMBER関数の場合は、番号付けを容易にするために専用の列が必要です。
ROW_NUMBER()
説明:結果セットのベテランのシリアルナンバーを返します。各パーティションの最初の行は1から始まります。
文法:ROW_NUMBER()OVER(<>order_by_clause>)
備考:ORDER BY子文は、特定のパーティションに一意のROW_を割り当てることができます。NUMBERの順序。
パラメータ::FROM子文生成の結果集をROW_に組み込む。NUMBER関数のパーティションです。
<order_by_clause>:ROW_を確定する。NUMBER値は、パーティションの行の順序に割り当てられます。
は、タイプを返します。
ROW_NUMBER()でよく使われるいくつかの場合
1.ロウウウを使うnumber()関数で番号を付けます。

select email,customerID, ROW_NUMBER() over(order by psd) as rows from QT_Customer

原理:まずpspdによって並べ替えて、並べ替え終わった後に、すべてのデータに番号を付けます。
2.注文書の中で価格の上昇順に並べ替えて、記録ごとに並べ替えコードは以下の通りです。

select DID,customerID,totalPrice,ROW_NUMBER() over(order by totalPrice) as rows from OP_Order

3.各戸のすべての注文を集計して、各取引先の注文金額によって昇順に並べて、同時に各取引先の注文書に番号を付けます。このようにして、お客さんごとにいくつ注文しますか?
図のように:
コードは以下の通りです

select ROW_NUMBER() over(partition by customerID order by totalPrice) as rows,customerID,totalPrice, DID from OP_Order

4.お客様の最近の注文を統計すると何回目の注文ですか?
コードは以下の通りです

with tabs as 
( 
select ROW_NUMBER() over(partition by customerID order by totalPrice) as rows,customerID,totalPrice, DID from OP_Order 
 ) 
select MAX(rows) as '    ',customerID from tabs group by customerID
5.お客様のすべての注文の中で購入した金額を集計し、注文書を変更する中で、お客様は何回目に買いましたか?
図のように:
ローソンはお客様が何回目に買いますか?
考え方:臨時表を利用してこの操作を実行します。
1.まずお客様のグループに分けて、お客様の注文時間によって並べ替えて、番号を付けます。
2.その後、サブクエリを利用して、お客様ごとの購入時の最小価格を検索します。
3.お客様ごとの最小価格を検索することによって、該当レコードを検索します。
コードは以下の通りです

with tabs as 
 ( 
select ROW_NUMBER() over(partition by customerID order by insDT) as rows,customerID,totalPrice, DID from OP_Order 
) 
 select * from tabs 
where totalPrice in 
( 
select MIN(totalPrice)from tabs group by customerID 
 )
6.お客様が初めて注文したものを選別します。
考え方。ローソン=1を利用して、お客様が初めて注文した記録を調べます。
コードは以下の通りです

with tabs as 
( 
select ROW_NUMBER() over(partition by customerID order by insDT) as rows,* from OP_Order 
) 
select * from tabs where rows = 1 
select * from OP_Order
7.ローソンnumber()は改ページに使用できます。
考え方:まずすべての製品を選別して、これらの製品を番号付けします。そしてwhere子文の中でフィルタリングを行います。
実例

--      

create proc usp_GetMyPhotos
 @pageIndex int, --    
 @pageSize int, --     
 @pageCount int output --        
as
 declare @count int --     
 select @count =COUNT(*) from Photos
 set @pageCount = CEILING( @count*1.0/@pageSize)
 select * from
(select *,ROW_NUMBER() over(order by pid desc) as num
from Photos) as t
where num between @pageSize*(@pageIndex-1) + 1 and @pageSize*@pageIndex
8.overなどの関数を使用する場合、overの中のパケットと並び替えの実行は「where,group by,order by」より遅いです。
コード:

select 
ROW_NUMBER() over(partition by customerID order by insDT) as rows, 
customerID,totalPrice, DID 
from OP_Order where insDT>'2011-07-22'
以上のコードはまずwhere子文を実行し、実行後、各レコードに番号を付けます。
以上でSQL Server中row_numberの使い方を詳しく解説した文章を紹介します。SQL Server中row_numberの内容は私達の以前の文章を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。