如何从左连接的结果中选择数据

时间:2011-03-01 18:21:10

标签: sql sql-server select left-join

我有一个正确返回三列的查询。我无法弄清楚如何仅使用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

在第四列中,我要做的是根据STUSKILLS上左连接的结果从PROGSKILLS表中SUM一个名为MINSCORE的列。换句话说,我只想对左连接引用的那些元素求和。

我尝试了很多次尝试,但似乎所有尝试都失败了,或者导致其他数据列结果成倍增加。

我最好的猜测是将以下内容添加到我的主要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获取数据。

事先......谢谢!

1 个答案:

答案 0 :(得分:4)

你试过这个:?

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