2011-03-01 68 views
1

我有一個正確返回三列的查詢。我無法弄清楚如何僅使用LEFT JOIN的結果來添加一個僅包含SUM()數據的frouth列。如何從左連接的結果中選擇數據

這裏是返回正確的三列原始查詢:


 
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 

我所試圖做的,在第四列中,將基於ST上左連接的結果從PROGSKILLS表中SUM一個名爲MINSCORE的列USKILLS。換句話說,我只想總結那些左連接引用的元素。

我已經嘗試了很多嘗試,但似乎都失敗語法或導致其他數據列結果相乘。

我最好的猜測,是下面的添加到我的主要SELECT子句...

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

但SQL抱怨說,SUM(SELECT語法錯誤和ss.skill_no不能綁定。

我知道,SUM(SELECT是可以接受的。

我意識到這是一個非常複雜的查詢,但我希望有人能幫助我弄清楚如何讓基於在「A」列數的元素PROGSKILLS數據。

提前...謝謝!

回答

4

你試過這個:?

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

是的,它做到了。男人,我喜歡stackoverflow(和所有的貢獻者) – 2011-03-01 20:48:29