2011-03-01 63 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