Выражение case, возвращающее несколько строк

Я пытаюсь настроить двоичный столбец, показывающий, зарегистрировался ли студент на семестр 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  

Вторая строка НЕ ​​создается. Эта строка будет существовать независимо от того, включите ли вы одно из этих выражений CASE.

JNevill 30.05.2019 20:56

покажите ваш образец вывода

Zaynul Abadin Tuhin 30.05.2019 20:59

Вот пример моего вывода. Я пытаюсь получить одну строку на человека:

Lyndey 30.05.2019 21:11

Спасибо Барбарос Ожан за редактирование.

Lyndey 30.05.2019 21:26
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
4
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

использовать 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

Спасибо за идею, но я получил ошибку: Для этого подключения разрешены только запросы DML/SQL.

Lyndey 30.05.2019 21:29

@Lyndey, проверь сейчас

Zaynul Abadin Tuhin 30.05.2019 21:34

Другие вопросы по теме