根据不同的条件多次选择单列

时间:2015-07-20 11:43:07

标签: sql oracle

我编写了一个SQL查询来检索所需的数据,如下所示:

SELECT  distinct p.person_id,p.birth_date,p.gender_code,
        wm_concat(distinct r.race_code) as race_code,p.hispanic_latino_code,
        c.clinically_diagnosed_code,
        wm_concat(distinct c.characteristic_code) as chara_codes,
        p.prev_adopted_code,p.age_adopted,
        FIRST_VALUE(pe.removed_date) OVER (ORDER BY pe.removed_date),
        count(pe.removed_date) as removal_count,
        LAST_VALUE(pe.discharge_date) OVER (ORDER BY pe.discharge_date),
        LAST_VALUE(pe.removed_date) OVER (ORDER BY  pe.removed_date) as latest_removal_date,pe.created_date,
        pe.removal_circumstance_code,wm_concat(distinct rr.removal_reason_code) as removal_reasons,
        ps.placement_type_code,ps.icpc_placement_flag,pe.caretaker_structure_code    
FROM PERSON p left outer join RACE r on p.person_id = r.person_id
       left outer join CHARACTERISTIC c on c.person_id = p.person_id
       left outer join PLACEMENT_EPISODE pe on p.person_id = pe.child_id
       left outer join PLACEMENT_SETTING ps on p.person_id = ps.child_id
       left outer join REMOVAL_REASON rr on pe.placement_episode_id = rr.placement_episode_id
GROUP BY p.person_id,p.birth_date,p.gender_code,p.hispanic_latino_code,
       c.clinically_diagnosed_code,p.prev_adopted_code,p.age_adopted,pe.removed_date,
       pe.discharge_date,pe.removed_date,pe.created_date,pe.removal_circumstance_code,
       ps.placement_type_code,ps.icpc_placement_flag,pe.caretaker_structure_code
ORDER BY p.person_id

在上述查询中,我已经选择了一个人的出生日期。现在再次在select子句中我想为具有以下条件的人选择birth_date:

condition 1: p.person_id  =  pe.primary_caretaker_id
condition 2: p.person_id  =  pe.secondary_caretaker_id  

有人可以告诉我在现有查询中选择这些字段的方法(基于两种不同条件的birth_date)吗?

已为个人选择了Birth_date一次。现在我想为primary_caretaker和secondary_caretaker检索birth_date。

1 个答案:

答案 0 :(得分:1)

您需要再次加入SELECT distinct p.person_id,p.birth_date,p.gender_code, wm_concat(distinct r.race_code) as race_code,p.hispanic_latino_code, c.clinically_diagnosed_code, wm_concat(distinct c.characteristic_code) as chara_codes, p.prev_adopted_code,p.age_adopted, FIRST_VALUE(pe.removed_date) OVER (ORDER BY pe.removed_date), count(pe.removed_date) as removal_count, LAST_VALUE(pe.discharge_date) OVER (ORDER BY pe.discharge_date), LAST_VALUE(pe.removed_date) OVER (ORDER BY pe.removed_date) as latest_removal_date, pe.created_date, pe.removal_circumstance_code,wm_concat(distinct rr.removal_reason_code) as removal_reasons, ps.placement_type_code,ps.icpc_placement_flag,pe.caretaker_structure_code, primCare.birth_date as primary_carer_birth_date, secCare.birth_date as secondary_carer_birth_date, FROM PERSON p left outer join RACE r on p.person_id = r.person_id left outer join PERSON primCare on primCare.person_id = pe.primary_caretaker_id left outer join PERSON secCare on secCare.person_id = pe.secondary_caretaker_id left outer join CHARACTERISTIC c on c.person_id = p.person_id left outer join PLACEMENT_EPISODE pe on p.person_id = pe.child_id left outer join PLACEMENT_SETTING ps on p.person_id = ps.child_id left outer join REMOVAL_REASON rr on pe.placement_episode_id = rr.placement_episode_id GROUP BY p.person_id,p.birth_date,p.gender_code,p.hispanic_latino_code, c.clinically_diagnosed_code,p.prev_adopted_code,p.age_adopted,pe.removed_date, pe.discharge_date,pe.removed_date,pe.created_date,pe.removal_circumstance_code, ps.placement_type_code,ps.icpc_placement_flag,pe.caretaker_structure_code, primCare.birth_date, secCare.birth_date ORDER BY p.person_id表格两次:

ScrollPane