一张表字段日期、帐号、取款金额,现需要从中找出从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子句有问题。
不知道大家还有什么办法吗?
如果是总金额的话,那就用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子句有问题。
不知道大家还有什么办法吗?
解决方案 »
- 如何获取IE窗体标题栏,并显示在TEXT1中?
- 请问adodc控件在哪里?
- vbscript如何向數據庫插入數據
- ADO建新表带字符“-”时,产生实时错误'80004005',如何解决?
- 今天写代码的时候遇到的两个棘手问题
- 请问带数据库的应用系统一定要在安装了数据库的终端上才能运行吗?--不耻下问!
- 求助!查询结果在新表单不刷新,该怎样解决?
- 请求各位关于MSFLEXGRID控件的问题?
- 如何检测COM口上的条码机发生的读条形码动作。。。。
- Help me ! Why???
- 亲爱的朋友,你现在是否还在花父母的血汗钱?是否喜欢一样东西但不敢问津?是否有心爱的女孩,却因为囊中羞涩而失之交臂?
- ADO的小问题
from tableName
where month(日期) = 1 and 取款金额 >= 1000;
你可以先在数据库里建一个查询
找出所有当日提款总额大于1000的记录
再用in来进行一次查询应该能写进同一个SQL里
一时想不来....
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)
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)
“但我现在要求显示的是每笔记录,”是什么意思呢?假如是符合条件的人当天的每笔纪录就用上面的这个语句吧。
还有一点想法哦,就是你的字段名字最好换换,实在是用起来不方便。
那么你表示日期的字段rq 是字符串?
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
union
select * from abc group by rq,zh having sum(qkje)>1000在加上时间限制条件就行了
(select rq from abc group by rq having sum(je)>1000)
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
)
哈哈哈哈哈!!!!
from tableName
where rq & zh in(select rq & zh
from tableName
group by rq & zh
having sum(je) > 1000)
表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 林
请问如果阿土前面的语句是正确的话,那么这一句错在什么地方?
比如另一个表名是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)还有点儿建设
连接符最好用 & 只有在数学运算时用 +
这样做一是速度
二是不容易出一些不该出的错误