2016-10-11 42 views
1

Dense_Rankはすべてを考慮しています。DENSE_RANKを使用してヌル値を除外します。

A  | DENSE_R 
-------------- 
1  | 1 
-------------- 
2  | null 
-------------- 
3  | 3 
-------------- 
4  | 4  

これは私がテーブルにしたいものです:1後の次のランクが2になりなく3

これは、テーブルには、今のように見えるものであるので、null値を除外するための方法はあります私はそうするように、次のコードを使用してい

A  | DENSE_R 
-------------- 
1  | 1 
-------------- 
2  | null 
-------------- 
3  | 2 
-------------- 
4  | 3 

::のように見える -

WITH CTE AS 
(
SELECT A 
FROM A1 
) 
SELECT A, 
CASE 
    WHEN **Condition** 
    THEN DENSE_RANK() OVER (Order by [A] ASC) 
END 
AS 'DENSE_R' 
FROM CTE 

答えて

3

使用partition byすでに使用されたのと同じ**Condition**

WITH CTE AS 
(
SELECT A 
FROM A1 
) 
SELECT A, 
CASE 
    WHEN **Condition** 
    THEN DENSE_RANK() OVER (Partition by (case when **Condition** then 1 else 0 end) Order by [A] ASC) 
END 
AS 'DENSE_R' 
FROM CTE 
+0

私はあなたのケースの周りに '(' ')'の特別なセットが必要だと思います。 – Hogan

+0

いいえ。彼らは必要ではありません。 – GriGrim

+1

甘い! Def。読むのがはるかに難しいが、甘い。 – Hogan

2

あなたはを使用することができますこのような:

select A, 
     (case when A is not null 
      then dense_rank() over (partition by (case when A is not null then 1 else 0 end) 
            order by a desc 
            ) 
     end) as dr 
from A1; 
+0

Aがnullの場合、返されるデータはどうなりますか? –

+0

申し訳ありませんが、私は正しく質問を投稿しませんでした、戻って、編集を見てください。 Aは決してnullではありません。 'その問題を引き起こしているDense_Rです。 – kage77

+0

@RossBush Nothing。 'else'が記述されていないので、' dr'は 'null'になります。 – GriGrim

関連する問題