有销售表如下,销售人员名称及销售额(万元)
create table #temp(name nvarchar(32),saleroom int)
insert into #temp(name,saleroom) values('关羽',500)
insert into #temp(name,saleroom) values('张飞',400)
insert into #temp(name,saleroom) values('赵云',410)
insert into #temp(name,saleroom) values('马超',430)
insert into #temp(name,saleroom) values('黄忠',350)
--需要按销售额排序,得到前三名销售排名数据(不使用游标、临时表、自增字段,且在函数里的实现)
declare @temp table(id int,name nvarchar(32),saleroom int)
insert into @temp
select null,name,saleroom
from #temp order by saleroom desc
declare @id int
set @id=0
update @temp set @id=@id+1,id=@id
select top 3 id as N'销售排名',name as N'销售代表',saleroom as N'销售额(万元)' from @temp
--结束
drop table #temp
不用SQL Server2000表变量特性的另种写法。
--有销售表如下,销售人员名称及销售额(万元)
create table #temp(name nvarchar(32),saleroom int)
insert into #temp(name,saleroom) values('关羽',500)
insert into #temp(name,saleroom) values('张飞',400)
insert into #temp(name,saleroom) values('赵云',410)
insert into #temp(name,saleroom) values('马超',430)
insert into #temp(name,saleroom) values('黄忠',350)
--增加排名字段的同时,转存到临时表(应对非SQL Server没有表变量的情况下的使用)
select Null as ID,* into #Report from #temp
--当前销售代表的销量(Report)和所有销售代表比较(AllReport),得出比自己销量高的代表有多少个。
--而自己的排名,就是销量比我高的人数+1
Update #Report
Set id = (Select Count(*) + 1 From #Report AllReport Where Report.saleroom < AllReport.saleroom)
From #Report Report
select id as N'销售排名',name as N'销售代表',saleroom as N'销售额(万元)' from #Report
drop table #Report
--结束
drop table #temp |