2017-02-23 4 views
0

次のデータセットでは、NULL LocNameを使用してES Houエンティティを削除しようとしています。私は他の3つのレコードを保管したい。私はrow_number()関数でこれをやろうとしてきましたが、null以外の値を取得してnull値よりも高いランクを取得する方法がわかりません。助言がありますか?ヌル値と非ヌル値を注文するウィンドウ関数が必要

PracticeId LastName EntityId LocId EntityName LocName PracName 
    53681  Thomas 3194  2222 ECS Tampa NULL  NULL 
    53681  Thomas 3195  2222 ECS Atlanta NULL  NULL 
    53681  Thomas 3222  2222 ES Hou  NULL  NULL 
    53681  Thomas 3222  2434 ES Hou  ECS Hou Regional Med 
+0

ここではどこを使わないのですか? – scaisEdge

+0

entityname内で重複がチェックされていますか? locnameにすべての行がnullの場合はどうなりますか?あなたはただそれらの行から1行を取得したいですか?それらのすべてがnullでない場合はどうなりますか?それではどうなりますか? – GurV

答えて

0

あなたは適宜NULL値を注文して、あなたのROW_NUMBER機能にCASEまたはIIFステートメントを使用することができます。

SELECT 
    * 
, ROW_NUMBER() OVER(ORDER BY IIF(LocName IS NULL, 0, 1), SomeOtherColumnToSort) AS SortOrder 

FROM 
    Table 
+0

ISNULL()関数を使用している場合は、IIFを使用してnullであるかどうかを確認するのはなぜですか? – asemprini87

+0

本当に 'ISNULL()'を使うことができます – mheptinstall

1

Row_Number窓関数の順序を降順でLocNameでは、NULL値は最後に

Select * from 
(
select Row_Number()over(Partition by EntityName Order by LocName desc) Rn, * 
From yourtable 
) A 
Where Rn = 1 

注ソートされます:あなたはそれEntityNameに複数のNOT NULL LocNameを持っている場合はを1つのレコードしか表示されません

+0

ありがとう、これはうまくいったようです! – jackstraw22

0

row_numberを使用して大文字小文字を使用してカスタム注文を作成できます。 null以外の値locnameを昇順にソートすることはできましたが、それは特定の順序(質問に記載されていない)で行の1つを選択します。

select * from (
select 
    t.*, 
    row_number() over (partition by entityname 
         order by case when locname is null then 1 else 0 end) rn 
from your_table t 
) t where rn = 1;