难道这条sql语句就这么难写吗?刚才大家回答的都不正确.......

xuqli 2003-05-20 02:44:52
一张表字段日期、帐号、取款金额,现需要从中找出从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子句有问题。
不知道大家还有什么办法吗?


...全文
19 点赞 收藏 23
写回复
23 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xayzmb 2003-05-21
* 号的地方根据你想要显示的字段写出字段名
这个习惯比较好.
使代码易读
并且也有助于提高查询速度
不过这种查询数据量大的话
可能还是很慢的
不如直接写在数据库中
在界面调用
回复
xayzmb 2003-05-21
估一个连接就可以了
比如另一个表名是tableName2

select *
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)

还有点儿建设
连接符最好用 & 只有在数学运算时用 +
这样做一是速度
二是不容易出一些不该出的错误
回复
xuqli 2003-05-21
谢谢,该问题已经解决。
回复
xuqli 2003-05-20
to 行者:要求是表里面所有记录如果当天发生的总额超过1000,那么分笔显示记录,没有超过的,则不显示,还有就是把另外一张表里面的客户姓名也取出来。
回复
xuqli 2003-05-20
阿土的方法是可以的。我的要求就是找出一个月内每天客户取款数额累加大于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 林
请问如果阿土前面的语句是正确的话,那么这一句错在什么地方?
回复
flyingworm 2003-05-20
select * from abc where rq+zh in(select distinct rq+zh from abc group by rq+zh having sum(je)>1000)测试过了,可以。
回复
xayzmb 2003-05-20

楼主
我们写了半天
到底问题解决了没有??
回复
xayzmb 2003-05-20
select *
from tableName
where rq & zh in(select rq & zh
from tableName
group by rq & zh
having sum(je) > 1000)
回复
xayzmb 2003-05-20
呵呵
这个想法很有意思.
回复
fraser01 2003-05-20
要求如果是这样的话,可以吗?答案:
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
)
哈哈哈哈哈!!!!
回复
xayzmb 2003-05-20
这两种要求的结果是不同的哦...
回复
xayzmb 2003-05-20
不知大家注意到没有
字段zh的用途
是客户名或帐户名吗?
如果只是要查某一日期提款大于1000的
还是查某一帐户在某一天内的提款大于1000的记录?
回复
yzmyf 2003-05-20
select * from abc where rq in
(select rq from abc group by rq having sum(je)>1000)
回复
zhp80 2003-05-20
select DISTINCT * from abc where qkje>1000
union
select * from abc group by rq,zh having sum(qkje)>1000

在加上时间限制条件就行了
回复
FBStudio 2003-05-20
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
回复
VVV_lucky 2003-05-20
假如sikeen(阿土)的方法是正确的。
那么你表示日期的字段rq 是字符串?
回复
VVV_lucky 2003-05-20
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)
“但我现在要求显示的是每笔记录,”是什么意思呢?假如是符合条件的人当天的每笔纪录就用上面的这个语句吧。
还有一点想法哦,就是你的字段名字最好换换,实在是用起来不方便。
回复
xuqli 2003-05-20
sikeen(阿土)的方法是正确的。你的方法,我试过但是查找出来的记录会多余的。
回复
xayzmb 2003-05-20
这样试试
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)
回复
Vii 2003-05-20
up
回复
加载更多回复
相关推荐
发帖
VB基础类
创建于2007-09-28

7489

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2003-05-20 02:44
社区公告
暂无公告