|
楼主 |
发表于 2011-1-25 10:32
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
回复 23楼 zzmxy 的帖子
我们来分析这个语句:
select 1+count(T.语文) from [成绩表$] T where 班级=T.班级 and T.语文>语文
这里,T.语文和语文都是别名为T的成绩表的语文.也就是说,他们表示的同时同一个东东.只不过一个是完整的声明了从属表的写法,一个是没有声明从属表的写法.最终的结果是自己和自己比,自己自然不可能比自己大,所以count(T.语文)返回的是0个,0+1,结果自然就是1.
假如我们改成:
select 班级,学生,
语文,(select 1+count(T.语文) from [成绩表$] T where g.班级=T.班级 and T.语文>g.语文) as 语文排名 from [成绩表$]g
那么,就可以得到对比的结果了.
这里实际上了两个表同班级的语文作比较.T.语文是子查询表的语文,g.语文是主查询的语法,count(T.语文)统计的是同班级子查询的语文比主查询语文大的次数.
需要注意的是,假如一个字段省略声明从属表,那么这个字段的从属表就是他所在的表.
正如你的语句中,T.语文和语文都是表别名为T的语文字段 |
|