请教一个SQL的简单排序问题。
原序:
ID SID CID NAME
14 1 000100 新闻资讯
15 3 000101 政务公开
16 2 000102 办事指南
99 0 00010200 文化市场类
100 1 00010201 文化艺术类
17 4 000103 群众文化
18 5 000104 机关建设
138 0 000105 省厅概况
新序:
ID SID CID NAME
138 0 000105 省厅概况
14 1 000100 新闻资讯
16 2 000102 办事指南
99 0 00010200 文化市场类
100 1 00010201 文化艺术类
15 3 000101 政务公开
17 4 000103 群众文化
18 5 000104 机关建设
难点在于:如果根据CID为主排序,则无法对SID进行排序;而如果根据SID为主排序,则又无法对CID进行排序。
[解决办法]
select * from 表 order by SID,CID
[解决办法]
没看明白 LZ的排序规则
[解决办法]
faint,
select * from table_Pqs order by SID,CID 按照字段前后顺序规则排序
[解决办法]
新序也没有规则
[解决办法]
明确的告诉你没有办法呀!!
[解决办法]
create funcation getsid(@cid varchar(8))
returns int
as
begin
decale @sid int
if len(rtrim(@cid))=8
select @sid=sid from 表 where cid=left(@cid,6)
else
select @sid=sid from 表
return @sid
end
go
select * from 表 order by dbo.getsid(cid),len(rtrim(cid)),sid
[解决办法]
上面第一句笔误
create function getsid(@cid varchar(8))
[解决办法]
create function getsid(@cid varchar(8))
returns int
as
begin
declare @sid int
if len(rtrim(@cid))=8
select @sid=sid from 表 where cid=left(@cid,6)
else
select @sid=sid from 表
return @sid
end
go
select * from 表 order by dbo.getsid(cid),len(rtrim(cid)),sid
[解决办法]
按SID排序的时候00010200和00010201一定会排进去的,如果不修改SID值是不可能的。所以只有修改SID值才能让他们排在一起
[解决办法]
这个是存储过程吧?能不能不用存储过程?就直接在程序中的SQL语句中使用?
----------------------
这只定义了个函数
以后就只要用
select * from 表 order by dbo.getsid(cid),len(rtrim(cid)),sid
[解决办法]
select id,sid,cid,[name] from
(
select id,sid,cid,[name], id * ((select max(id) from tTest) + 1) as sortorder
from tTest
where len(ltrim(rtrim(cid)))=6
union
select id,sid,cid,[name]
,[id]+ (select sortorder from
(select id,sid,cid, id * ((select max(id) from tTest) + 1) as sortorder
from tTest
where len(ltrim(rtrim(cid)))=6) T1
where t1.cid = left(A.cid,6))
from tTest A
where len(ltrim(rtrim(cid)))=8
) ABC
ORDER BY sortorder
[解决办法]
create funcation getsid(@cid varchar(8))
returns int
as
begin
decale @sid int
if len(rtrim(@cid))=8
select @sid=sid from 表 where cid=left(@cid,6)
else
select @sid=sid from 表
return @sid
end
go
select * from 表 order by dbo.getsid(cid),len(rtrim(cid)),sid
[解决办法]
这样排
select * from yourtable order by substring(cid,1,len(cid)-2)+right( '0 '+convert(varchar,SID),2)
[解决办法]
既然如此难排,何不考虑一下多追加一个字段呢,省事多了
办事指南,文化市场类-------本来就是两个层次的,表结构设计不太合理