0

SQL クエリで Dense_Rank を使用して、一部の列で同じデータを含む行をランク付けし、次の行で変更されたデータが見つかったときにランクを上げようとしています。私はこのクエリで成功しました:

SELECT DENSE_RANK () OVER (ORDER BY ID, Date1) AS P_Key, 
   *
FROM dbo.tbl_Main T
ORDER BY S_ID, ID, Date1, Date2;

しかし、ランクは順番に来るのではなく、メインのSQLに適用される順序に従って来ます。スクリプトの出力は次のとおりです。

ここに画像の説明を入力

スクリーンショットからわかるように、ID 列と Date1 列に同じデータを持つ行に同じランク (P_Key) を与えていますが、メインの Order By のためにどこでも順序がずれています。メインの「Order By」によって適用されるのと同じ順序で他の行が表示され、「P_Key」のシーケンスが1から開始され、その後順次増加するようにします。どうすればそうできますか?

4

1 に答える 1

0

DENSE_RANK の ORDER BY 内でソートする列を指定しない限り、DENSE_RANK に ORDER BY を使用することはできません。CTEまたはを使用することもできますDerived tables。次の方法で実行できます

;WITH CTE AS
(
    SELECT DENSE_RANK () OVER (ORDER BY ID, Date1) AS P_Key,*
    FROM MyTable T  
)
SELECT * FROM CTE
ORDER BY P_Key,S_ID, ID, Date1, Date2
于 2015-05-04T16:14:00.180 に答える