一张表字段日期、帐号、取款金额,现需要从中找出从1月1日到31日中,当日取款金额总和超过1000的每条记录。
如果是总金额的话,那就用select rq,zh,sum(qkje) as qkje1 from abc group by rq,zh having sum(qkje)>1000.
但我现在要求显示的是每笔记录,用in的语句好象也不行...例子:
     rq         zh          je
1   20030501    0001        500
2   20030501    0001        600   
3   20030501    0002        800
4   20030501    0002        324 
5   20030502    0001        150 
6   20030502    0001        300
7   20030502    0002        1300
8   20030502    0002        66
现在要求显示上述记录中当天取款总额大于1000的,也就是得到1、2、3、4、7、8这6条记录.请问该怎么写sql语句?本人曾经在visdata里面尝试过以下几个朋友的方法,还是不正确的。
一、 clamber(攀登) ( ) 信誉:100 提供:    select * from abc where zh in(select zh from abc group by rq,zh having sum(qkje)>1000)
结果得到8条记录。
二、 Leftie(Leftie) ( ) 提供:select a.* from tablename as a,(select zh from tablename group by zh having sum(qkje)>1000) as b
where a.zh=b.zh
这一句更不行,提示DAO里面from子句有问题。
不知道大家还有什么办法吗?

解决方案 »

  1.   

    select *
    from tableName
    where month(日期) = 1 and 取款金额 >= 1000;
      

  2.   

    上面那个不行
    你可以先在数据库里建一个查询
    找出所有当日提款总额大于1000的记录
    再用in来进行一次查询应该能写进同一个SQL里
    一时想不来....
      

  3.   

    select * from abc where rq + zh in(select rq + zh from abc group by rq + zh having sum(je)>1000)
      

  4.   

    这样试试
    select * 
    from tableName
    where rq in (select rq 
                 from tableName
                 group by zh,rq 
                 having sum(je)>1000)
      and zh in (select zh
                 from tableName
                 group by zh,rq
                 having sum(je) > 100)
      

  5.   

    sikeen(阿土)的方法是正确的。你的方法,我试过但是查找出来的记录会多余的。
      

  6.   

    SELECT          A.*
    FROM            test1 A ,
                    (SELECT          rq, zh
                     FROM             test1
                     GROUP BY     zh, rq
                     HAVING        SUM(je) > 1000) B 
    WHERE           (A.zh = B.zh) and (A.rq = B.rq)
    “但我现在要求显示的是每笔记录,”是什么意思呢?假如是符合条件的人当天的每笔纪录就用上面的这个语句吧。
    还有一点想法哦,就是你的字段名字最好换换,实在是用起来不方便。
      

  7.   

    假如sikeen(阿土)的方法是正确的。
    那么你表示日期的字段rq  是字符串?
      

  8.   

    select a.*
    from abc a inner join (select rq, zh from abc group by rq,zh having sum(qkje) > 1000) b on a.rq = b.rq and a.zh = b.zh
      

  9.   

    select DISTINCT * from abc where qkje>1000
    union
    select * from abc group by rq,zh having sum(qkje)>1000在加上时间限制条件就行了
      

  10.   

    select * from abc where rq in
    (select rq from abc group by rq having sum(je)>1000)
      

  11.   

    要求如果是这样的话,可以吗?答案:
    select * from zz where convert(varchar,rq)+' '+zh in(
    Select convert(varchar,rq)+' '+zh as a from zz group by rq,zh having sum(je)>1000
    )
    哈哈哈哈哈!!!!
      

  12.   

    select *
    from tableName
    where rq & zh in(select rq & zh 
                     from tableName 
                     group by rq & zh 
                     having sum(je) > 1000)
      

  13.   

    select * from abc where rq+zh in(select distinct rq+zh from abc group by rq+zh having sum(je)>1000)测试过了,可以。
      

  14.   

    阿土的方法是可以的。我的要求就是找出一个月内每天客户取款数额累加大于1000的每条记录,比如取500和600,那么显示这两条记录,取了300和400,则不显示。谢谢大家的关心,不过我还有一个问题,如果再关联另外一张表acmain,取出里面的name字段,用他这个好象就不行了,记录会变多。具体如下:
    表abc:
     字段:rq    zh     je   kmh    
    表acmain 
      字段:zh    name     kmh
    我用以下的语句是:
    select a.rq as rq,a.zh as zh,a.je as je,b.name as name from abc as a, acmain as b where a.zh=b.zh and (rq+zh in (select distinct rq+zh from abc group by rq+zh having sum(je)>1000)) and rq  between "20030501" and "20030531" and (a.kmh="00201" or a.kmh="02011")
    用以上的语句查询出来的结果是原先不应该有的记录也出现了,如这两条记录也出现了
     rq           zh       je    name
    20030503     90001     300    林
    20030503     90001     500    林
    请问如果阿土前面的语句是正确的话,那么这一句错在什么地方?  
      

  15.   

    估一个连接就可以了
    比如另一个表名是tableName2select *
    from tableName a left join tableName2 b
      on a.zh = b.zh
    where a.rq & a.zh in(select rq & zh 
                         from tableName 
                         group by rq & zh 
                         having sum(je) > 1000)还有点儿建设
    连接符最好用 & 只有在数学运算时用 +
    这样做一是速度
    二是不容易出一些不该出的错误