用SQL排名次的问题 Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiDB/html/delphi_20061222112436167.html
在制作一个货物销量排名报表时,我用一名SQL语句联合查询出了货物ID及对应的销售总量:
SQL.text:='select 货物ID,sum(销量) as 销量 from 销售表 group by 货物ID order by sum(销量) desc'
现在我想在查询结果中加一个名次字段,显示排名,请教各位这句SQL该如何写
SQL.text:='select '+ quotedstr('排名值') + ' as 排名,货物ID,sum(销量) as 销量 from 销售表 group by 货物ID order by sum(销量) desc'
这样会显示排名字段,而且值全部是“排名值”
大哥,这样的话,排名字段显示的内容全都是字符“排名值”,有什么意思呢,我是想让排名的值从1、2、3依次递增
哈,这问题太难了吧,怎么没人回答?
没感觉很难,一个相关子查询就能搞定,可能是大家都写累了吧!
我帮你写一个!
保留名次:
Select *,
Rank=(select count(distinct(销量)) from table1 where 销量>=A.销量)
From table1 A
不保留名次:
select *,
rank=(select count(1) from table1 where 销量>A.销量)+1
from table1 A
谢谢楼上的大哥,可惜我看不懂,能不能解释一下?
我帮忙解释一下,用保留名次语句会显示如下:
1
2
2
2
3
4(记录数一共为6条)
用不保留名次显示如下:
1
2
2
2
5
6(记录数一共为6条)
其中销量表示排序字段,用子查询来获得大于该销量的记录数(就是排名了)。
谢谢笑青天和绿色落叶,我主要是对以上语法不懂,查了一下SQL中文参考手册,搜索rank,竟找不到一条,在网上查找后,才知是某数据库服务器特有的东西,可我用的是access呀,再请二位老师指教。