差不多的:
Declare @OrderBy smallint
Declare @t table(a1 int,a2 int,a3 varchar(10))
insert into @t
select 1,2,'3'
union all select 2,3,'4'
union all select 3,3,'3'
union all select 6,4,'3'
union all select 2,5,'7'--测试1
set @OrderBy=1
select * from @t
order by case @OrderBy
when 1 then a1
when 2 then a2
when 3 then a3 end
desc--测试2
set @OrderBy=2
select * from @t
order by case @OrderBy
when 1 then a1
when 2 then a2
when 3 then a3 end
desc--测试3
set @OrderBy=3
select * from @t
order by case @OrderBy
when 1 then a1
when 2 then a2
when 3 then a3 end
desc
Declare @OrderBy smallint
Declare @t table(a1 int,a2 int,a3 varchar(10))
insert into @t
select 1,2,'3'
union all select 2,3,'4'
union all select 3,3,'3'
union all select 6,4,'3'
union all select 2,5,'7'--测试1
set @OrderBy=1
select * from @t
order by case @OrderBy
when 1 then a1
when 2 then a2
when 3 then a3 end
desc--测试2
set @OrderBy=2
select * from @t
order by case @OrderBy
when 1 then a1
when 2 then a2
when 3 then a3 end
desc--测试3
set @OrderBy=3
select * from @t
order by case @OrderBy
when 1 then a1
when 2 then a2
when 3 then a3 end
desc
处理方法一样.--下面是测试
Declare @OrderBy smallint
Declare @t table(a1 varchar(1),a2 varchar(1),a3 varchar(1))
insert into @t
select 'a','b','c'
union all select '2','a','4'
union all select '3','3','3'
union all select '6','b','a'--测试1
set @OrderBy=1
select * from @t
order by case @OrderBy
when 1 then a1
when 2 then a2
when 3 then a3 end--测试2
set @OrderBy=2
select * from @t
order by case @OrderBy
when 1 then a1
when 2 then a2
when 3 then a3 end--测试3
set @OrderBy=3
select * from @t
order by case @OrderBy
when 1 then a1
when 2 then a2
when 3 then a3 end/*--测试结果--测试1
a1 a2 a3
---- ---- ----
2 a 4
3 3 3
6 b a
a b c(所影响的行数为 4 行)--测试2
a1 a2 a3
---- ---- ----
3 3 3
2 a 4
a b c
6 b a(所影响的行数为 4 行)--测试3
a1 a2 a3
---- ---- ----
3 3 3
2 a 4
6 b a
a b c(所影响的行数为 4 行)--*/
set @OrderBy=3
select * from @t
order by case @OrderBy
when 1 then a1
when 2 then a2
when 3 then 2147483647-a3 --假设这个需要倒序,一个足够大的数减它就行
end