大家帮帮忙,取前50名怎么取啊(20分)

  • 主题发起人 主题发起人 lf43
  • 开始时间 开始时间
L

lf43

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在有三个表,一个是客户积分档案表yx_jfdab记录了每一位客户各月的积分,一个是客户兑奖积分累加表(yx_jfdab)记录每一个客户每一次兑奖后的用掉的累加积分,其中XFJF为消费积分,ZWJF为在网积分,JLJF为奖励各分,yd为已兑的拼声。三客户档案表(yx_yhdab)记录客户基本信息,我现在要从总积分>500的记录中(从积分高低排序)取出前任意名,请问这条sql语句该怎么写啊
我写的SQL语句如下,通过ROWNUM>50取出的好像不是总积分按排序后的前50名,虽然能取出50名也按从高到低排序,但是好像不是所有记录中总积分最高的在最前,而是当前显示的前50条中的记录的最高分最前,请问该怎么办?同时请问该语句该怎么优化
非常感谢
select rownum ,a.dhhm dhhm,c.khmc khmc,a.zxfjf-nvl(b.ydxfjf,0) dqxfjf,a.zzwjf-nvl(b.ydzwjf,0) dqzwjf,a.zjljf-nvl(b.ydjljf,0) dqjljf
,a.zxfjf-nvl(b.ydxfjf,0)+a.zzwjf-nvl(b.ydzwjf,0)+a.zjljf-nvl(b.ydjljf,0)+nvl(b.ljjzjf,0) zjf,nvl(b.ljdf,0) ljdf,nvl(b.ljjzjf,0) ljjzjf from
(select dhhm,sum(xfjf) zxfjf,sum(zwjf) zzwjf,sum(jljf) zjlj from yx_jfdab group by dhhm)A,
(select dhhm,ydxfjf,ydzwjf,ydjljf,ljdf,ljjzjf from yx_jfdjljb)B,
(select dhhm,khmc,blzd8 from jfxt.yx_yhdab)C
where a.dhhm=b.dhhm(+) and a.zxfjf-nvl(b.ydxfjf,0)+a.zzwjf-nvl(b.ydzwjf,0)+a.zjljf-nvl(b.ydjljf,0)+nvl(b.ljjzjf,0)>500
and a.dhhm=c.dhhm and rownum<50 order by zjf desc;
 
能不能先搞几个视图出来? 看得头晕~
 
没细看你的东西,看眼花了 :)
大概是要取前几名是吧?
试试以下方法,不知道是你想要的不?
select top 50 yourField From yourTable order by yourField
 
我用的是ORACLE数据库,select top 不能用,有没有别的办法
 
Oracle方面的SQL语句范例,可以提供你参考。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1382881
 
SELECT *
FROM (
SELECT A, B, C
FROM DATA
WHERE IDXPARTNO = 753
AND IDXMACHINENO = 405
AND IDXPROCM = 981
ORDER BY B DESC, C DESC
) A
WHERE ROWNUM <= 60

为什么上面的语句我在PB还是SQLPLUS中都调试不过,提示missing right parenthesis
救救我吧
 
那个数据库我没怎么用过,
不过也知道ROWNUM>50这个条件也是可以用的,SQLSERVER是用TOP,
然后再加上什么分数合计>500的条件,
然后按分数合计字段排序,要Desc,
视图怎样, 你自己组织吧。
 
看不明白你的问题,先把表结构贴出来好吗
 
用delphi比较容易实现,直接在sql plus里实现就要想一想了
 
首先在查询语句前设置取多少行
利用order by 进行排序,
最后恢复原设置
例:
set rowcount 50
select * from abc order by 条件
set rowcount 0


 
你的SQL语句有问题,select rownum ,a.dhhm dhhm,c.khmc khmc...中RowNUM并不是排序后
的RowNum,仔细想一想!能不能把你SQL语句断出个层次来再贴出来?
 
select rownum ,a.dhhm dhhm,c.khmc khmc,a.zxfjf-nvl(b.ydxfjf,0) dqxfjf,a.zzwjf-nvl(b.ydzwjf,0) dqzwjf,a.zjljf-nvl(b.ydjljf,0) dqjljf
,a.zxfjf-nvl(b.ydxfjf,0)+a.zzwjf-nvl(b.ydzwjf,0)+a.zjljf-nvl(b.ydjljf,0)+nvl(b.ljjzjf,0) zjf,nvl(b.ljdf,0) ljdf,nvl(b.ljjzjf,0) ljjzjf
from
(select dhhm,sum(xfjf) zxfjf,sum(zwjf) zzwjf,sum(jljf) zjlj from yx_jfdab group by dhhm)A,
(select dhhm,ydxfjf,ydzwjf,ydjljf,ljdf,ljjzjf from yx_jfdjljb)B,
(select dhhm,khmc,blzd8 from jfxt.yx_yhdab)C
where a.dhhm=b.dhhm(+) and a.zxfjf-nvl(b.ydxfjf,0)+a.zzwjf-nvl(b.ydzwjf,0)+a.zjljf-nvl(b.ydjljf,0)+nvl(b.ljjzjf,0)>500
and a.dhhm=c.dhhm and rownum<50 order by zjf desc;
 
兄弟,你考虑过这句sql的效率?
 
考虑过,但我没有别的办法啊,各位大侠有没有好的办法啊,帮帮忙吧
 
试一下
---------------------------------------------------------------
select rownum ,a.dhhm dhhm,c.khmc khmc,a.zxfjf-nvl(b.ydxfjf,0) dqxfjf,a.zzwjf-nvl(b.ydzwjf,0) dqzwjf,a.zjljf-nvl(b.ydjljf,0) dqjljf
,a.zxfjf-nvl(b.ydxfjf,0)+a.zzwjf-nvl(b.ydzwjf,0)+a.zjljf-nvl(b.ydjljf,0)+nvl(b.ljjzjf,0) zjf,nvl(b.ljdf,0) ljdf,nvl(b.ljjzjf,0) ljjzjf
from
(select a.*,b.*,c.* from
(select dhhm,sum(xfjf) zxfjf,sum(zwjf) zzwjf,sum(jljf) zjlj from yx_jfdab group by dhhm)A,
(select dhhm,ydxfjf,ydzwjf,ydjljf,ljdf,ljjzjf from yx_jfdjljb)B,
(select dhhm,khmc,blzd8 from jfxt.yx_yhdab)C
where a.dhhm=b.dhhm(+) and a.zxfjf-nvl(b.ydxfjf,0)+a.zzwjf-nvl(b.ydzwjf,0)+a.zjljf-nvl(b.ydjljf,0)+nvl(b.ljjzjf,0)>500
and a.dhhm=c.dhhm order by zjf desc)
where rownum<50 ;
 
有了order by zjf desc就调试不过,提示missing right parenthesis
难道order by zjf desc只能 放在最后吗
 
order by 子句应该放在where 子句后面
 
我试过用rownum<n(n<>1)的方法,这样实际上是取不出数据的,好像在哪看过一篇相关的文章能select 到数据
 
后退
顶部