起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1416|回复: 2

动态设置数据集的排序

[复制链接]
发表于 2004-4-6 15:49:51 | 显示全部楼层 |阅读模式
数据集动态设置排序是指客户端的排序不是服务端的排序,参考代码如下:

1、升序,dsData.DataSet.Order := 'ID';     

2、降序,dsData.DataSet.Order := 'ID DESC';


提示:如果有多个字段要使用“;”隔开
回复

使用道具 举报

 楼主| 发表于 2008-8-19 11:16:59 | 显示全部楼层

特殊的排序1

例如,现有医院行政级别数据,需要由低(一乙)到高(三甲)排序
CREATE TABLE #TEMP(NAME NVARCHAR(32))
INSERT INTO #TEMP(NAME) VALUES('三甲')
INSERT INTO #TEMP(NAME) VALUES('一乙')
INSERT INTO #TEMP(NAME) VALUES('二甲')
INSERT INTO #TEMP(NAME) VALUES('三乙')
INSERT INTO #TEMP(NAME) VALUES('一甲')
INSERT INTO #TEMP(NAME) VALUES('二乙')

--CHARINDEX:返回字符串中指定表达式的起始位置
SELECT * FROM #TEMP
ORDER BY CHARINDEX(SUBSTRING(NAME,2,1),'乙甲'),
CHARINDEX(SUBSTRING(NAME,1,1),'一二三四五六七八九十')

--CHARINDEX 和 PATINDEX 函数都返回指定模式的开始位置。PATINDEX 可使用通配符,而 CHARINDEX 不可以。
SELECT * FROM #TEMP
ORDER BY PATINDEX('%'+SUBSTRING(NAME,2,1)+'%','乙甲'),
PATINDEX('%'+SUBSTRING(NAME,1,1)+'%','一二三四五六七八九十')


DROP TABLE #TEMP
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-19 11:18:04 | 显示全部楼层

特殊排序2

有销售表如下,销售人员名称及销售额(万元)
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
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-23 00:38 , Processed in 0.038044 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表