首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问一个SQL的简单排序有关问题

2012-01-29 
请教一个SQL的简单排序问题。原序:IDSIDCIDNAME141000100新闻资讯153000101政务公开162000102办事指南99000

请教一个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)
[解决办法]
既然如此难排,何不考虑一下多追加一个字段呢,省事多了
办事指南,文化市场类-------本来就是两个层次的,表结构设计不太合理

热点排行