回 帖 发 新 帖 刷新版面

主题:用select-sql如何实现这个功能

我想在两个数据表中实现查询,一个是班级定员包括班级、定员数,班主任等字段,另一个是所有学生的表包括班级号、姓名、班主任等字段。我用foxbase编的程序能实现检查定员数和实际学生人数是否一致,但我是想把我个结果输出到报表中,我想就得用select-sql语句了,我用foxbase编的程序如下,请老师指点:
select 1
use 学生库
select 2
use 定员库
do while .not.eof()
select 1
count for A.班级号=B.班级 to nu
if nu<>B.定员数
?"定员数不符"+B.班级+"实际人数:"+str(nu,3)+"定员数:"+str(B.定员数)"&&想把这个结果输出到报表。
endif
select 2
skip
enddo

回复列表 (共12个回复)

沙发

select d.班级,d.定员数,count(x.*) as 实际人数;
   from 定员库 d,学生库 x;
   where d.班级=x.班级号;
  group by x.班级号;
  having d.定员数=count(x.*);
   into cursor xxx

板凳

[quote]select d.班级,d.定员数,count(x.*) as 实际人数;
   from 定员库 d,学生库 x;
   where d.班级=x.班级号;
  group by x.班级号;
  having d.定员数=count(x.*);
   into cursor xxx

[/quote]
提示不能识别短语或关键字,我用的是vf60,我还没有仔细研究,我先试试,看看是哪出了问题.谢谢!

3 楼

select 班级,定员数,count(*) as 实际人数;
   from 定员库 d,学生库 x;
   where 班级=班级号;
  group by 班级,定员数;
  having count(*)=定员数;
   into cursor xxx

4 楼

SELECT d.班级,d.定员数,COUNT(x.*) as 实际人数 ;
 FROM 定员库 d,学生库 x ;
  WHERE d.班级=x.班级号 GROUP BY x.班级号 HAVING d.定员数=COUNT(x.*) ;
 INTO CURSOR xxx

5 楼

高老师的语句没问题:
只是在命令窗口,或其它编辑软件编写语句时,插入了不可见的字符!

你可以把所有的空格都删除,再输入新空格!

6 楼

看你不细心,结果把高老师,气糊涂了:

把不错的语句,倒改成错误的语句了!

7 楼

[quote]select d.班级,d.定员数,count(x.*) as 实际人数;
   from 定员库 d,学生库 x;
   where d.班级=x.班级号;
  group by x.班级号;
  having d.定员数=count(x.*);
   into cursor xxx

[/quote]
我就奇怪了,和高老师一样的语句,用您的没出现问题,按您的提示我删除了所有的空格后又插入新空格,高老师的语句也没有问题了,只是在运行时两种方法均出现提示“无效的having子句”,我也先看看是怎么回事,还有一事请教老师,关于count(*)或count(x.*)在使用上有没有区别,我查阅了vfp8.0的帮助手册,没有这个函数,这个函数是不是只能用在select-sql语中,它是统计数据表中的记录个数的吧?和reccount()有什么区别?

8 楼

SELECT d.班级,d.定员数,COUNT(x.*) as 实际人数 ;
 FROM 定员库 d,学生库 x ;
  WHERE d.班级=x.班级号 GROUP BY x.班级号 HAVING d.定员数=实际人数 ;
 INTO CURSOR xxx

9 楼

[quote]SELECT d.班级,d.定员数,COUNT(x.*) as 实际人数 ;
 FROM 定员库 d,学生库 x ;
  WHERE d.班级=x.班级号 GROUP BY x.班级号 HAVING d.定员数=实际人数 ;
 INTO CURSOR xxx[/quote]
老师您好,还是不行,提示having子句无效。

10 楼

三楼的语句被我在SQL Server2000中证实是可行的.

我来回复

您尚未登录,请登录后再回复。点此登录或注册