主题:用select-sql如何实现这个功能
laon
[专家分:180] 发布于 2008-05-07 08:34:00
我想在两个数据表中实现查询,一个是班级定员包括班级、定员数,班主任等字段,另一个是所有学生的表包括班级号、姓名、班主任等字段。我用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个回复)
沙发
jinlonggao [专家分:17130] 发布于 2008-05-07 09:17:00
select d.班级,d.定员数,count(x.*) as 实际人数;
from 定员库 d,学生库 x;
where d.班级=x.班级号;
group by x.班级号;
having d.定员数=count(x.*);
into cursor xxx
板凳
laon [专家分:180] 发布于 2008-05-08 08:16:00
[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 楼
jinlonggao [专家分:17130] 发布于 2008-05-08 09:03:00
select 班级,定员数,count(*) as 实际人数;
from 定员库 d,学生库 x;
where 班级=班级号;
group by 班级,定员数;
having count(*)=定员数;
into cursor xxx
4 楼
cbl518 [专家分:57140] 发布于 2008-05-08 09:08:00
SELECT d.班级,d.定员数,COUNT(x.*) as 实际人数 ;
FROM 定员库 d,学生库 x ;
WHERE d.班级=x.班级号 GROUP BY x.班级号 HAVING d.定员数=COUNT(x.*) ;
INTO CURSOR xxx
5 楼
cbl518 [专家分:57140] 发布于 2008-05-08 09:15:00
高老师的语句没问题:
只是在命令窗口,或其它编辑软件编写语句时,插入了不可见的字符!
你可以把所有的空格都删除,再输入新空格!
6 楼
cbl518 [专家分:57140] 发布于 2008-05-08 09:19:00
看你不细心,结果把高老师,气糊涂了:
把不错的语句,倒改成错误的语句了!
7 楼
laon [专家分:180] 发布于 2008-05-08 09:57:00
[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 楼
cbl518 [专家分:57140] 发布于 2008-05-08 10:01:00
SELECT d.班级,d.定员数,COUNT(x.*) as 实际人数 ;
FROM 定员库 d,学生库 x ;
WHERE d.班级=x.班级号 GROUP BY x.班级号 HAVING d.定员数=实际人数 ;
INTO CURSOR xxx
9 楼
laon [专家分:180] 发布于 2008-05-08 18:07:00
[quote]SELECT d.班级,d.定员数,COUNT(x.*) as 实际人数 ;
FROM 定员库 d,学生库 x ;
WHERE d.班级=x.班级号 GROUP BY x.班级号 HAVING d.定员数=实际人数 ;
INTO CURSOR xxx[/quote]
老师您好,还是不行,提示having子句无效。
10 楼
jinlonggao [专家分:17130] 发布于 2008-05-09 08:33:00
三楼的语句被我在SQL Server2000中证实是可行的.
我来回复