Выражение регистра, возвращающее несколько строк - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь настроить двоичный столбец, показывающий, зарегистрировался ли студент для термина S1 или S2.

Если значение равно 0, генерируется вторая строка.Можно ли ограничиться одной строкой для каждой записи?

select A.ID BSU_ID,
       A.person_uid BAN_ID,
       A.NAME STU_NAME,
       B.STUDENT_CLASSIFICATION_DESC BSU_Class,
       A.ACADEMIC_YEAR YEAR,
       A.ACADEMIC_PERIOD TERM,
       case when A.SUB_ACADEMIC_PERIOD in ('S1') then 1 else 0 end as S1_Enroll,
       case when A.SUB_ACADEMIC_PERIOD in ('S2') then 1 else 0 end as S2_Enroll

from odsmgr.student_course A,
     odsmgr.student B

where a.person_uid = b.person_uid
  and A.id = b.id
  and A.name = b.name
  and A.academic_period = '201950'
  and B.academic_period = '201950'
  and A.COURSE_BILLING_CREDITS >0.0
  and A.registration_status is not null

order by 1

Пример вывода (некоторые столбцы удалены для краткости):

|BSU_ID     |STU_NAME     |BSU_CLASS   |S1_ENROLL   |S2_ENROLL  
|999        |Michele M    |Non-Degree  |1           |0  
|999        |Michele M    |Non-Degree  |0           |1  
|999        |Michele M    |Non-Degree  |1           |0  
|999        |Michele M    |Non-Degree  |0           |1  

1 Ответ

0 голосов
/ 30 мая 2019

использовать row_number ()

select * from ( select
    A.ID BSU_ID,
    A.person_uid BAN_ID,
    A.NAME STU_NAME,
    B.STUDENT_CLASSIFICATION_DESC BSU_Class,
    A.ACADEMIC_YEAR YEAR,
    A.ACADEMIC_PERIOD TERM,
    case when A.SUB_ACADEMIC_PERIOD in ('S1') then 1 else 0 end as S1_Enroll,
    case when A.SUB_ACADEMIC_PERIOD in ('S2') then 1 else 0 end as S2_Enroll,
    row_number() over(partition by A.person_uid order by A.ACADEMIC_PERIOD ) rn

    from odsmgr.student_course A join
    odsmgr.student B

    on 
    a.person_uid = b.person_uid
    and A.id = b.id
    and A.name = b.name
    and A.academic_period = '201950'
    and B.academic_period = '201950'
    where
     A.COURSE_BILLING_CREDITS >0.0
    and A.registration_status is not null
  ) cte where rn=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...