回 帖 发 新 帖 刷新版面

主题:求sql语句

业务:收取思想汇报,每交一篇,记录学号,递交时间,收取人

表1                                  表2    
学号 |递交时间   |  收取人                学号|姓名|班级|联系方式|
11    2002-02-02    admin                 11    ysl  aa    123
11    2003-02-02    qq
我想查询 递交时间在 t1和t2之间 而且递交篇数<= x 的学生的学号,姓名,班级,篇数(其中t1,t2,x是参数)

回复列表 (共12个回复)

沙发

select 学号,姓名,班级,count(*) as 篇数  from(select * from 表2 join 表1 on 表2.学号=表1.学号 where 递交时间 between t1 and t2)Temp group by 学号,姓名,班级 having count(*)<=x

板凳

我依样画葫芦,但程序还是错误啊,请再帮我看一下啊!错误在红体字部分
 with query4 do
    begin
    sql.Clear;
    sql.Add('select xh 学号,xm 姓名,bj 班级,count(*) 篇数 [color=FF0000]from(select [/color]* from t_info join t_report1 on t_info.xh=t_report1.xh where sj between :sj1 and :sj2)temp') ;
    sql.add('group by xh,xm,bj');
    sql.add('having count(*)<:ps');
    parambyname('sj1').AsDateTime:=datetimepicker1.DateTime;
    parambyname('sj2').AsDateTime:=datetimepicker2.DateTime;
    parambyname('ps').Value:=strtoint(rzedit1.Text);
    open;

3 楼

a

4 楼

我也不知道什么原因,是不是不兼容这样的语句啊

5 楼

错误原因"Invalid use of keyword"

token:select

6 楼

with query4 do
    begin
    sql.Clear;
    sql.Add('select xh 学号,xm 姓名,bj 班级,count(*) 篇数 from(select * from t_info join t_report1 on t_info.xh=t_report1.xh where sj between :sj1 and :sj2)temp ') ;
    sql.add(' group by xh,xm,bj ');
    sql.add(' having count(*)<:ps ');
    parambyname('sj1').AsDateTime:=datetimepicker1.DateTime;
    parambyname('sj2').AsDateTime:=datetimepicker2.DateTime;
    parambyname('ps').Value:=strtoint(rzedit1.Text);
    open;

在试试

7 楼

语句好象没有变化啊

8 楼

delphi 只支持简单的sql语句,好象不支持join 和 temp这些应用吧。

9 楼

1、两个SQL语句有区别.sql.add(' group by xh,xm,bj ');中的前或后要加空格,否则SQL语句有可能运行出来是错的。
    sql.add('group by xh,xm,bj');
    sql.add('having count(*)<:ps');
运行出来的结果可能是:group by xh,xm,bjhaving count(*)<:ps

2、delphi可以支持任何复杂的SQL语句。只要能在对应的数据库中能执行的SQL 语句,在Delphi都可以用。
别说是join on语句了,就算是游标、存储过程等都可以执行。

10 楼

你用的是什么数据库!如果是SQL Server用事件探查器 跟一下吧。看看最终的SQL语句是什么!
错误可能出在SQL的参数,
你不用参数直接付值试试。

with query4 do
    begin
    sql.Clear;
    sql.Add('select xh 学号,xm 姓名,bj 班级,count(*) 篇数 from(select * from t_info join t_report1 on t_info.xh=t_report1.xh where sj between '+QuotedStr(DateToStr(datetimepicker1.DateTime))+' and '+QuotedStr(DateToStr(datetimepicker2.DateTime))+' ')temp ') ;
    sql.add(' group by xh,xm,bj ');
    sql.add(' having count(*)<'+Trim(rzedit1.Text)+' ');
    open; 
  end;

我可以担保我写的SQL语句不可能有问题。

我来回复

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