2016-07-19 5 views
0

データを行から他の表の列にエレガントにマップする方法として、私は困惑しています。異なる表の列と行のマッピング

入力表

FORM_SUBMISSION表 -

ID =フォーム識別子 ENTRY_ID =質問識別子 RESPONSE =の応答

ID ENTRY_ID RESPONSE 
4 24   John 
4 25   Doe 
4 26   Male 
4 32   NY 
4 30   Life-Threatening 
4 30   Other Serious 
4 30   Hospitalization 
4 28   Tylenol 
4 31   I have a headache. 

私はカップルにマッピングする必要がありますテーブルPATIENT_INFO,PATIENT_OUTCOME

出力表

PATIENT_INFO

REPORT_ID FIRST_NAME LAST_NAME STATE GENDER COMPLAINT 
4   John   Doe   NY  Male  I have a headache. 

PATIENT_OUTCOME

REPORT_ID OTHER_SERIOUS_IND LIFE_THREAT_IND HOSPITAL_IND DISABILITY_IND 
4   Y     Y     Y    N 

ので、列に行をリンクする直接的な方法はない、 は、作成することが可能ですENTRY_IDと列名に基づいたマッピング?​​の列は、すべての行に基づいていますが、ENTRY_ID = 30.

+0

@sstan申し訳ありませんが、私は誤解が、私は 'PATIENT_INFO'と' PATIENT_OUTCOME'に記載されているどのような望ましい結果ではありませんすることができます?私はソーステーブル 'FORM_SUBMISSION'を宛先テーブル' PATIENT_INFO'と 'PATIENT_OUTCOME'に変換しようとしています – Alan

+1

@sstanああ、私はそれについてより明確にするために私の投稿を編集しました。 – Alan

答えて

1

条件付き集計で行うことができます。しかし、最終的には、マッピングを正しく行うためのルールを把握する必要があります。

ここでは、マッピングの仕組みについての私の非常に基本的な理解に基づくいくつかのサンプルSQLを示します。おそらくそれをさらに微調整する必要があります。

PATIENT_INFO

select id as report_id, 
     max(case when entry_id = 24 then response end) as first_name, 
     max(case when entry_id = 25 then response end) as last_name, 
     max(case when entry_id = 32 then response end) as state, 
     max(case when entry_id = 26 then response end) as gender, 
     max(case when entry_id = 31 then response end) as complaint 
    from form_submission 
group by id 

PATIENT_OUTCOME

select id as report_id, 
     nvl(max(case when entry_id = 30 and response = 'Other Serious' then 'Y' end), 'N') as OTHER_SERIOUS_IND, 
     nvl(max(case when entry_id = 30 and response = 'Life-Threatening' then 'Y' end), 'N') as LIFE_THREAT_IND, 
     nvl(max(case when entry_id = 30 and response = 'Hospitalization' then 'Y' end), 'N') as HOSPITAL_IND, 
     nvl(max(case when entry_id = 30 and response = '??Disability??' then 'Y' end), 'N') as DISABILITY_IND 
    from form_submission 
group by id 
+0

ありがとう! entry_idでハードコーディングするのではなく、マッピングを行うためにテーブルを使用する方法はありますか? – Alan

+0

あなたが参加できる別のテーブル '[entry_id、entry_name]'を作成することができます。そして、 'case'式は数字の代わりに' entry_name'をチェックできます。しかし、私の意見では、少し醜い*部分は、 'patient_outcome'で' response'の特定の値に対してもチェックする必要があります。それは私にはちょっとしたようですが、私はあなたがそれについて多くを行うことができないと思います。 – sstan

+0

@Alan 'patient_info'と' patient_outcome'ビューを作る方法はありますか? – user272735

関連する問題