Как выбрать данные из результатов левого соединения - PullRequest
1 голос
/ 01 марта 2011

У меня есть запрос, который возвращает три столбца правильно. Я не могу понять, как добавить следующий столбец, в котором SUM () представляет данные, используя только результаты LEFT JOIN.

Вот исходный запрос, который возвращает правильные три столбца:


select TITLES.NAME, 
COUNT(progskills.skill_no) as B, 
COUNT(ss.skill_no) as A,
SUM(ss.score) as C
FROM TITLES 
inner join progskills   
    on progskills.program_no = titles.title_no
left join STUSKILLS ss
    on  progskills.SKILL_NO = ss.skill_no 
    and ss.STUDENT_NO = '1234'
where progskills.program_no in (select progskills.program_no 
                                from PROGSKILLS, STUSKILLS 
                               where progskills.SKILL_NO = stuskills.SKILL_NO
                                 and stuskills.SCORE != 0
                                 and stuskills.STUDENT_NO = '1234')
group by titles.name

, который правильно возвращает следующие результаты:

                          B   A     C 
Database Administration   4   1     50
Implementation Specialist 4   1     50
Office Manager            4   2    130
Registrar                 4   2    130
Scheduler                 4   3    130
Scheduling Assistant      2   1     50
Support Systems Manager   4   2    130

В четвертом столбце я пытаюсь суммировать столбец с именем MINSCORE из таблицы PROGSKILLS, основываясь на результатах левого соединения STUSKILLS. Другими словами, я хочу суммировать только те элементы, на которые ссылается левое соединение.

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

Мое лучшее предположение - добавить следующее в мое основное предложение SELECT ...

SUM(select ps.minscore from PROGSKILLS ps where ps.SKILL_NO = ss.skill_no) as D

Но SQL жалуется, что SUM (SELECT является синтаксической ошибкой и ss.skill_no не может быть привязан.

Я знаю, что СУММА (ВЫБОР допустим.

Я понимаю, что это очень сложный запрос, но я надеюсь, что кто-то может помочь мне выяснить, как получить данные из PROGSKILLS на основе элементов, подсчитанных в столбце "A".

Заранее ... СПАСИБО!

1 Ответ

4 голосов
/ 01 марта 2011

Вы пробовали это:?

sum(case when ss.skill_no is null then 0 else progskills.MINSCORE end) as D
...