0
DECLARE @Table TABLE(
A INT,
B INT,
C INT
)
INSERT INTO @Table SELECT 1, 1, NULL
INSERT INTO @Table SELECT 1, 1, NULL
INSERT INTO @Table SELECT 1, 1, 1
INSERT INTO @Table SELECT 1, 1, 2
INSERT INTO @Table SELECT 1, 1, 2
INSERT INTO @Table SELECT 1, 1, 2
INSERT INTO @Table SELECT 1, 2, 1
INSERT INTO @Table SELECT 1, 2, 2
INSERT INTO @Table SELECT 2, 1, NULL
INSERT INTO @Table SELECT 2, 1, NULL
INSERT INTO @Table SELECT 2, 1, 1
INSERT INTO @Table SELECT 2, 2, 1
INSERT INTO @Table SELECT 2, 2, 1
INSERT INTO @Table SELECT 2, 2, NULL
SELECT A, B, C, DENSE_RANK() OVER (ORDER BY A,B,C DESC) AS rank
FROM @Table
を考えると、結果は次のとおりです。
A B C rank
1 1 2 1
1 1 2 1
1 1 2 1
1 1 1 2
1 1 NULL 3
1 1 NULL 3
1 2 2 4
1 2 1 5
2 1 1 6
2 1 NULL 7
2 1 NULL 7
2 2 1 8
2 2 1 8
2 2 NULL 9
私は1 1 NULL
と2 1 NULL
のインスタンスが別々のランクになりたいです。私は、NULL値を未知の値で扱い、ヌルを一緒にグループ化しないように扱いたい。
許容答えはNULL値が先頭または末尾にある場合、私は気にしない
A B C rank
1 1 2 1
1 1 2 1
1 1 2 1
1 1 1 2
1 1 NULL 3
1 1 NULL 4
1 2 2 5
1 2 1 6
2 1 1 7
2 1 NULL 8
2 1 NULL 9
2 2 1 10
2 2 1 10
2 2 NULL 11
可能性があり、それがあります。私は実際に物事をランキングしていません。私はDENSE_RANK
を各グループに一意の番号を付ける手段として使用しています。
私は、SQLサーバーに2014
私は1つの1 NULLを見ています=ランク3;一方、2 1 NULL =ランク7です。それらは区別されませんか? – Greenspark
いいえ、DENSE_RANKはNULLを同じものとして扱います - したがって問題です – CuriousDeveloper