1

こんにちは、私はいくつかのSQLを持っています...

SELECT  
    AdviceNo,
    Registration
FROM tblSalesDetail

...のようなものを生成します

ADV00001, ABC123
ADV00001, CDE564
ADV00002, FGE432
ADV00003, HUY789
ADV00003, MJS532
ADV00003, JFY428

次のように調整する方法を教えてください。

ADV00001, ABC123, 1
ADV00001, CDE564, 2
ADV00002, FGE432, 1
ADV00003, HUY789, 1
ADV00003, MJS532, 2
ADV00003, JFY428, 3
4

2 に答える 2

2

row_number()and句を使用しpartition byて、overグループに基づいてカウントをリセットできます。構文は次のようなものです(注、テストされていません):

SELECT  
    AdviceNo,
    Registration,
    row_number() over
    (partition by AdviceNo
     order by Registration)     as Ordinal
FROM tblSalesDetail

partition by少し似group byていますが、データをロールアップしません。パーティション内で計算しているものをリセットするだけです。この場合、組み込み関数を使用して行番号を計算し、グループ内の登録によって並べ替えています。

MSDN ドキュメントへのこのリンクでは、 T-SQL での OVER の使用について説明しています。それをサポートする他のプラットフォームでも基本的に同じです。

于 2010-05-13T16:47:49.247 に答える
1

Oracle Analytical Functions はどうですか?

これは、RANK が役立つ古典的な例です ;-)

SELECT AdviceNo,
       Registration,
       RANK () OVER (PARTITION BY AdviceNo ORDER BY Registration ASC) MY_RANK
  FROM tblSalesDetail;
于 2010-05-13T16:46:03.357 に答える