SQL语句排序排序问题(很难)

数据库:SQL2000现有表:TABLE字段:NAMESTAT值:-------------------------------A15,25,84,0,145,800,2... 数据库:SQL2000
现有表:TABLE
字段: NAME STAT
值: ------- ------------------------
A 15,25,84,0,145,800,26
B 96
C 15,458,12,1,54
D 25,454,2485,4548,42,2
E 0,0,15,0

求跟据STAT字段逗号后的值(即最后一个值)排序的方法
如果无逗号(即只有一个值)时就用当前值.
特殊情况,SQL语句要用到程序中,所以不能使用存储过程...

只能一条SQL语句搞定,有没办法??

如果不用一条语句,用过程,方法就很多了.......

mxm_1123不愧为专家啊

太有才啦.啦啦啦啦,牛...想了几天没想出这个办法......

关键是用reverse这个思路.牛.

不过如果只接用你的好像是字段串排序,排序有点误.

再加上zhaoqf8080 答案,合并最为最佳答案.

select name,stat from table order by cast(reverse(left(reverse(','+stat),charindex(',',reverse(','+stat))-1)) as int) desc

可是鸟百度的系统,分只能给一人...唉,实在不好意思....
展开
 我来答
dongfanghong_1
2007-11-03 · TA获得超过363个赞
知道小有建树答主
回答量:272
采纳率:0%
帮助的人:313万
展开全部
求跟据STAT字段逗号后的值(即最后一个值)排序的方法
如果无逗号(即只有一个值)时就用当前值.

解:根据题意,只要取出字符串最后的一个数字,便可排序,自定义函数取stat字段的最后数字:

函数如下:
create function testaa(@sec varchar(1000))
returns varchar(2000)
/*
====================================================
功能:取出字符串的最后的数字
====================================================
*/
as
begin
declare @str varchar(2000)
set @str=''
declare @i int
set @i=0
declare @str1 varchar(100),@str2 varchar(100)
set @str1=''
while @i<=len(@sec)
begin
set @str1=substring(@sec,@i,1)
if @str1=','
begin
set @str=''
end
else
begin
set @str=@str+substring(@sec,@i,1)
end
set @i=@i+1
end
return @str
end
-----------------------------------
最后结果:
select name,stat,dbo.testaa(stat) from table
order by dbo.testaa(stat) desc
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mxm_1123
2007-11-03 · TA获得超过1779个赞
知道大有可为答主
回答量:496
采纳率:0%
帮助的人:0
展开全部
试试吧:
select * from table1
order by
reverse(substring(reverse(','+stat),1,charindex(',',reverse(','+stat))-1))
语法上不知道正确不正确,但思路肯定是对的,应该可以通过吧
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
日人园卡个6146
2007-11-03 · TA获得超过212个赞
知道小有建树答主
回答量:209
采纳率:0%
帮助的人:186万
展开全部
***********************
是按字符串来排序还是按数字来排序呢?会有些不同啊
语句如下,前面是建表的部份,后面的查询写了两个,看你的需要吧,
create table tbtest
(
nname char(1) primary key,stat nvarchar(100)
)
go
insert tbtest values ('A','15,25,84,0,145,800,26')
insert tbtest values ('B','96')
insert tbtest values ('C','15,458,12,1,54')
insert tbtest values ('D','25,454,2485,4548,42,2')
insert tbtest values ('E','0,0,15,0')
*********按数字排序
select * from tbtest a
order by cast(reverse(left(reverse(','+stat),(select charindex(',',reverse(','+stat))from tbtest where nname=a.nname)-1 )) as int)
***********按字符串排序
select * from tbtest a
order by reverse(left(reverse(','+stat),(select charindex(',',reverse(','+stat))from tbtest where nname=a.nname)-1 ))
以上语句都在sql2000中运行过,正确
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0f88597
2007-11-03 · TA获得超过135个赞
知道小有建树答主
回答量:343
采纳率:0%
帮助的人:202万
展开全部
建表:
create table [table]
(
[name] char(1) primary key,stat nvarchar(100)
)
go
insert [table] values ('A','15,25,84,0,145,800,26')
insert [table] values ('B','96')
insert [table] values ('C','15,458,12,1,54')
insert [table] values ('D','25,454,2485,4548,42,2')
insert [table] values ('E','0,0,15,0')

排序:
declare @temp table([name] char(1),stat varchar(100))
declare @name char(1),@stat varchar(100)
declare sort_cursor cursor
for select * from [table]
open sort_cursor
fetch next from sort_cursor into @name,@stat
declare @i int
while @@fetch_status=0
begin
set @i=charindex(',',@stat)
if @i<1 insert @temp values(@name,@stat)
while @i>=1
begin
set @stat=substring(@stat,@i+1,len(@stat)-@i)
set @i=charindex(',',@stat)
if @i<1 insert @temp values(@name,@stat)
end
fetch next from sort_cursor into @name,@stat
end
select * from @temp order by stat
close sort_cursor
deallocate sort_cursor

经测试结果正确
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友06d22a931
2007-11-03 · TA获得超过367个赞
知道小有建树答主
回答量:387
采纳率:0%
帮助的人:201万
展开全部
不太满足范式吧~~?
你可以用java连接数据库,
通过字符串来完成这个排序,
就会简单些。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式