程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 用SQL實現隔行排序

用SQL實現隔行排序

編輯:關於SqlServer
**//*
奇數行將前一半的按增序排,偶數行將後一般按增序排。以下為表數據:
column1    column2    column3
-----------------------
11    12    13
13    14    15
21    22    23
22    23    24
12    13    14
25    26    27
排完以後應為:
column1    column2    column3
-----------------------
11    12    13
21    22    23
12    13    14
22    23    24
13    14    15
25    26    27
以下為實現方式:
*/

create table t0(column1 int, column2 int, column3 int)
insert t0
      select 11, 12, 13
union all select 13, 14, 15
union all select 21, 22, 23
union all select 22, 23, 24
union all select 12, 13, 14
union all select 25, 26, 27

create table #t(column1 int, column2 int, column3 int)


DECLARE @c1 int,@c2 int,@c3 int,@n int,@a int,@b int
select @n=count(*) from t0
if (@n%2 =1) set @a=@n/2+1 else set @a=@n/2
set @b=@n-@a

exec('declare crs1 cursor for select top '+@a +' * from t0 order by column1')
exec('declare crs2 cursor for select * from (select top '+@b +' * from t0 order by column1 

desc) as b order by column1 asc')
open crs1
open crs2


while @n>0
begin
    print @n
    if @n%2=0
    begin
        FETCH NEXT FROM crs1 INTO @c1 ,@c2 ,@c3
        insert into #t values(@c1 ,@c2 ,@c3)
    end
    else
    begin
        FETCH NEXT FROM crs2 INTO @c1 ,@c2 ,@c3
        insert into #t values(@c1 ,@c2 ,@c3)
    end

    set @n=@n-1    
end

select * from #t

DEALLOCATE crs1
DEALLOCATE crs2
drop table #t

drop table t0
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved