Oracle SQL - найдите 2 столбца из другой таблицы - PullRequest
0 голосов
/ 18 ноября 2018

Итак, у меня есть 2 таблицы,

Reg_table

student_ID   Course_ID   **Register**_status
    1           co_01       enrolled
    2           co_03       pending
    3           co_05       cancelled
    4           co_06       enrolled

Compl_table

student_ID   Course_ID   **Completion**_status
    1           co_01       Attended
    1           co_03       
    3           co_05       
    4           co_06       Attended
    4           co_05       
    6           co_05      

Я хотел бы добавить новый статус в Reg_table как «Final_status», смотря на «Compl_table», на основе комбинации «Student_ID» и «Course_ID» обеих таблиц. то есть * Если учащийся «записался» на co_01, а затем «Attended» co_01, в окончательном статусе должно быть указано «Attended; * Если «завершение_стата» пустое или в «Compl_table» отсутствует комбинация «Student_ID» и «Course_ID», окончательный статус должен совпадать с «Register_status», т. Е. «Зарегистрирован», «ожидает рассмотрения» или «отменен» ».

Поэтому таблица результатов должна выглядеть следующим образом:

student_ID Course_ID **Final**_status<br> 1 co_01 Attended 2 co_03 pending 3 co_05 cancelled 4 co_06 Attended

Возможно ли это? Заранее спасибо.

Добавлен код (извините, немного сложнее, чем в примере), куда я дошел до

with reg_table as 

(select 
b.schd_id
,b.DMN_ID
,b.ACT_CPNT_ID
,b.CPNT_TYP_ID
,b.SCHD_DESC
,b.FACILITY_ID
,a.STUD_ID
,a.ENRL_STAT_ID
,a.ENRL_DTE
,c.CMPL_STAT_ID 
from 
 PA_ENROLL_SEAT a
,PA_SCHED b
,pa_cpnt_evthst c 
where
    a.schd_id = b.schd_id
    and
    b.ACT_CPNT_ID = c.CPNT_ID(+)
    and
    a.STUD_ID = c.STUD_ID(+) 
)
update reg_table r
    set CMPL_STAT_ID = (select CMPL_STAT_ID from pa_cpnt_evthst c where 
         c.stud_id = a.stud_id and c.CPNT_ID = b.ACT_CPNT_ID)

where exists (select 1
                  from pa_cpnt_evthst c
                  where c.stud_id = a.stud_id and
                        c.CPNT_ID = b.ACT_CPNT_ID and
                        c.CMPL_STAT_ID is not null
                 )

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Проверьте, работает ли это:

Select r.student_ID, r.Course_ID, nvl(c.Completion_status, r.Register_status) as Final_status
From Reg_table R
  left outer join Compl_table C on c.student_ID = r.student_ID and c.Course_ID = r.Course_ID
0 голосов
/ 18 ноября 2018

В Oracle вы можете сделать:

update reg_table r
    set register_status = (select c.completion_status
                           from compl_table c
                           where c.student_id = r.student_id and
                                 c.course_id = r.course_id
                          )
    where exists (select 1
                  from compl_table c
                  where c.student_id = r.student_id and
                        c.course_id = r.course_id and
                        c.completion_status is not null
                 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...