2017-07-28 16 views
-1

特定の列のデータをnullとして取得する場合、その列に対応するすべてのレコードを取得する必要があります。それ以外の場合はすべてのレコードをフェッチする必要があります他の列。列GRPに基づいて行われる上記の場合のグループ化には、レコード列の値に基づいて条件を決定する

以下

enter image description here

の例を見てみましょう。その特定のグループで、source_type列がいずれのレコードでもnullではない場合は、列に同じ値を持つすべてのレコードをフェッチする必要があります。source_typenullではありません。この場合、予想される出力は

enter image description here

である。しかしsource_type列がすべてのレコードのnullであれば、グループ内の場合には、我々は同じ値を持っているグループからすべてのレコードを取得する必要がありますこの場合.IN予想される出力は

enter image description here

+0

残りの3番目のスクリーンショットを入力してください。 – nop77svk

答えて

0

は、分析機能のための素晴らしい仕事のように見えるですMATCH_TYPE='MP'source列...

with xyz as (
    select X.*, 
     count(X.source_type) over (partition by X.grp, X.source) as non_null_source_type#, 
     first_value(case when X.match_type = 'MP' then X.source end) over (partition by X.grp) as source_from_mp$ 
    from table X 
) 
select * 
from xyz 
where non_null_source_type# > 0 
    or non_null_source_type# = 0 
     and source = source_from_mp$ 
; 

...あなたのユースケースを正しく理解している場合。

+0

お問い合わせいただきありがとうございます。本当に申し訳ありませんが、期待通りの結果が得られていません。 – GIN

+0

@GINは、あなたが質問を適切かつ徹底的に語っていないからです。 – nop77svk

関連する問題