SQL 排序
小弟做了一个数据库,里面有以S,Z,I开头的三种单据,现在我要把它在ASP中分页显示出来,这三个单据都是通过另外一个关键字联系起来的,我想出来的结果是先输出S单据,然后是Z单据,最后是I单据
如下:
S-06-001 ALA060032
Z-07-032 AlA060032
I-07-032 ALA060032
I-07-033 ALA060032
S-06-002 ALA060033
Z-07-030 AlA060033
I-07-034 ALA060033
……
这样如何实现,请高手指教!
------解决方案--------------------select *
from 表
order by case left(单据编号,1) when 'S ' then 1 when 'Z ' then 2 when 'I ' then 3 end
------解决方案-------------------- wangtiecheng能否帮我解释以下,这两句话中的1为什么不一样?前者是数字1,后者是指第一列?
--建立测试环境
create table #tb(sid varchar(20),col varchar(10))
insert #tb(sid,col)
select 'S-06-001 ', 'ALA060032 ' union all
select 'Z-07-032 ', 'AlA060032 ' union all
select 'I-07-032 ', 'ALA060032 ' union all
select 'I-07-033 ', 'ALA060032 ' union all
select 'S-06-002 ', 'ALA060033 ' union all
select 'Z-07-030 ', 'AlA060033 ' union all
select 'I-07-034 ', 'ALA060033 '
go
--执行测试语句
select t.sid,t.col from #tb t order by case left(sid,1) when 'S ' then 1 when 'Z ' then 2 when 'I ' then 3 end
select t.sid,t.col from #tb t order by 1
--删除测试环境
drop table #tb
go
/*--测试结果
sid col
-------------------- ----------
S-06-001 ALA060032
S-06-002 ALA060033
Z-07-030 AlA060033
Z-07-032 AlA060032
I-07-032 ALA060032
I-07-033 ALA060032
I-07-034 ALA060033
(7 row(s) affected)
sid col
-------------------- ----------
S-06-001 ALA060032
S-06-002 ALA060033
Z-07-030 AlA060033
Z-07-032 AlA060032
I-07-032 ALA060032
I-07-033 ALA060032
I-07-034 ALA060033
(7 row(s) affected)
sid col
-------------------- ----------
I-07-032 ALA060032
I-07-033 ALA060032
I-07-034 ALA060033
S-06-001 ALA060032
S-06-002 ALA060033
Z-07-030 AlA060033
Z-07-032 AlA060032
(7 row(s) affected)
*/
------解决方案----------------------建立测试环境
create table #tb(sid varchar(20),col varchar(10))
insert #tb(sid,col)
select 'S-06-001 ', 'ALA060032 ' union all
select 'Z-07-032 ', 'AlA060032 ' union all
select 'I-07-032 ', 'ALA060032 ' union all
select 'I-07-033 ', 'ALA060032 ' union all
select 'S-06-002 ', 'ALA060033 ' union all
select 'Z-07-030 ', 'AlA060033 ' union all
select 'I-07-034 ', 'ALA060033 '
go
--执行测试语句
select t.sid,t.col from #tb t order by t.col,case left(sid,1) when 'S ' then 1 when 'Z ' then 2 when 'I ' then 3 end
--删除测试环境
drop table #tb
go
--测试结果
S-06-001 ALA060032
Z-07-032 AlA060032
I-07-032 ALA060032
I-07-033 ALA060032
S-06-002 ALA060033
Z-07-030 AlA060033
I-07-034 ALA060033