2017-07-17 2 views
0

以下のシナリオに基づいてフラグを作成したいと考えています。ソーステーブルと私が望む結果は以下の表にあります。SQL Serverのケースステートメント - トランザクション別にグループ化するときに他の2つの列から1つの列を派生させる

SRCE_SYST_FLAGがヌルでない(そして= Y)は、次いで他、SRCE_SYST_FLAG列の値を使用して、新しいフラグ(DERIVED_FLAG)を作成GENERIC_FLAGカラムを使用します。

しかし同じTRAN_IDグループ内の別のレコードが移入SRCE_SYST_FLAG列を有する場合、他のSRCE_SYST_FDERIVED_FLAGを設定しました。以下はTRAN_ID = 2222のケースです。

誰でもケースステートメントを使用してこれを行う方法を知っていますか?私は、下記のような一般的なものを作ることができるが、これはNULLのレコードのためのSRCE_SYST_FLAGを使用しませんが、SRCE_SYST_FLAGはそのtran_idグループ内の別のレコードに移入さ:

CASE 
    WHEN SRCE_SYST_Flag = 'Y' 
     THEN SRCE_SYST_FLAG 
     ELSE GENERIC_FLAG 
END AS 'DERIVED_FLAG' 

サンプルデータセット:

Client | Limit  | Pdct_type_c | SRCE_SYST_FLAG | GENERIC_FLAG | TRAN_ID 
-------------------------------------------------------------------------------- 
John | 4,000,000.00 | DCO   | y    | N   | 2222 
John |    | DCO   | NULL   | N   | 2222 
Mark | 2,000,000.00 | DCO   | NULL   | N   | 435 
Mark |    | DCO   | NULL   | N   | 435 
Luke | 4,000,000.00 | DCO   | N    | Y   | 980 

望ましい結果:私はどのような援助に感謝

Client | Limit  | Pdct_type_c | DERIVED_FLAG | TRAN_ID 
--------------------------------------------------------------- 
John | 4,000,000.00 | DCO   | Y   | 2222 
John |    | DCO   | Y   | 2222 
Mark | 2,000,000.00 | DCO   | N   | 435 
Mark |    | DCO   | N   | 435 
Luke | 4,000,000.00 | DCO   | Y   | 980 

012 tran_idあたりの「Y」の数をカウントするの

乾杯

+0

あなたは私たちのすべての可能なケースをカバーするデータが表示されるはずです。 –

+0

'TRAN_ID = 2222 'の最初のレコードではなく、' SRCE_SYST_FLAG =' N 'とGENERIC_FLAG =' Y'のときにどうなるべきですか? –

+0

ソースシストフラグが 'Y'でない場合、DERIVED_FLAGをGENERIC_FLAGに設定してください。私は上記の情報を更新します – Patty

答えて

1

使用SUM OVER

select client 
, limit 
, Pdct_type_c 
, TRAN_ID 
, case when SUM(case when SRCE_SYST_FLAG = 'Y' then 1 else 0 end) OVER (partition by tran_id) > 0 then 'Y' else GENERIC_FLAG end DERIVED_FLAG 
from table 
関連する問題