以下是引用TZTJ在2015-10-8 22:34:08的发言:
select 姓名, sum(iif(课程名='政治',成绩,0))政治 ,sum(iif(课程名='语文',成绩,0))语文,sum(iif(课程名='数学',成绩,0))数学,sum(iif(课程名='英语',成绩,0))英语,sum(iif(课程名='物理',成绩,0))物理,sum(iif(课程名='化学',成绩,0))化学,sum(iif(课程名='历史',成绩,0))历史,sum(iif(课程名='地理',成绩,0))地理,sum(成绩)as 总分,avg(成绩)as 平均分 ;
from xscj2 having 班级=bj or 年级=bj group by 学号;
order by 平均分 desc;
into cursor temp
请高手指点,四五年前还可以用,到现在出现HAVING 句子无效
楼主,一个是如3楼提到的,having子句应在group子句后面;另一个是having其实与where子句并不完全相同,前者主要是用在条件中含有统计函数的情况下,而后者正相反。比如:列出平均分不满70的考生,应该这样写:SELECT 学号,姓名,AVG(成绩)平均分 FROM 成绩表 GROUP BY 学号,姓名 HAVING AVG(成绩)<70;再比如:找出所有课程都及格的考生,应该这样写:SELECT 学号,姓名 FROM 成绩表 GROUP BY 学号,姓名 HAVING MIN(成绩)>=60,而不能写成:SELECT 学号,姓名 FROM T1 WHERE 成绩>=60,更不能写成:SELECT 学号,姓名 FROM T1 WHERE MIN(成绩)>=60。
像你这条命令,除了这个问题外,还有一个问题:GROUP BY子句后面除了你写的“学号”字段外,还应有“姓名”,因为“姓名”字段在你的输出项中,又是唯一没套上统计函数的字段,必须要写在GROUP BY子句中。
[
本帖最后由 taifu945 于 2015-10-10 07:35 编辑 ]