Как вернуть только один ряд на курс - PullRequest
1 голос
/ 13 марта 2020

Я пытаюсь вернуть список идентификаторов курсов, которые содержат три компонента: задания, обсуждения и учебный план. Я хочу, чтобы в моих результатах была только одна строка для каждого идентификатора курса, причем буквы «Y» или «N» указывают, есть ли в этих курсах задания, обсуждения и учебная программа. Однако я получаю каждую уникальную комбинацию Y и N для данного идентификатора курса.

Как вернуть только одну строку для идентификатора курса?

select distinct cm.course_id as Course, 
case
    when exists (select 1 where gt.name ilike 'Assignment%')
        then 'Y'
        else 'N' 
end as are_there_assignments,
case
when exists (select 1 where gt.name ilike 'Discussion%')
    then 'Y'
      else 'N' 
end as are_there_discussions,
case
when exists (select 1 where ct.label ilike '%syllabus%' )
    then 'Y'
      else 'N' 
end as is_there_a_syllabus
from course_main cm
left join course_course cc
    on cm.pk1 = cc.crsmain_pk1
inner join gradebook_main gm
    on cm.pk1 = gm.crsmain_pk1
inner join gradebook_type gt
    on gm.gradebook_type_pk1 = gt.pk1
inner join course_toc ct
    on cm.pk1 = ct.crsmain_pk1
where cc.crsmain_parent_pk1 is NULL 
and (cm.course_id ilike '%SPF-2020-C%'
                    or cm.course_id ilike '%SPF-2020-S%'
                    or cm.course_id ilike '%SP2-2020-C%'
                    or cm.course_id ilike '%SP2-2020-S%'
                    or cm.course_id ilike '%SP2-2020-A%'
                    or cm.course_id ilike '%SPF-2020-A%')
order by cm.course_id;

Вот мои текущие результаты:

results

1 Ответ

1 голос
/ 13 марта 2020

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

select
    cm.course_id,
    max(case when gt.name ilike 'Assignment%' then 'Y' else 'N' end) are_there_assignments,
    max(case when gt.name ilike 'Discussion%' then 'Y' else 'N' end) are_there_discussions,
    max(case when ct.label ilike '%syllabus%' then 'Y' else 'N' end) is_there_a_syllabus
from ...
where ...
group by cm.course_id
order by cm.course_id
...