SQL语句中。我想通过不同条件来进行不同排序
例如:我的存储过程中有一个@orderType参数。。
当@orderType字段是1时,那么按照时间排序
当@orderType字段是2时,那么按照分数排序不知道有没有非常简洁SQL语句写法我现在想到的就只有是两种写法,但都不精简的:
1:if @orderType =1
begin
...
end
else if @orderType =2
begin
....
end2.合成SQL语句,跟上面的方法基本一样。

解决方案 »

  1.   

    合一起的话就是简化个写法。iif试试。
      

  2.   

    declare @sOrder varchar(100)
    if @orderType =1
     set @sOrder='时间字段'
    else
     set @sOrder='分数字段'begin
    ...
    set @sql=sql+' order by '+ @sOrder
    end
      

  3.   

    一般是采用Sql语句并接方法,declare @sql nvarchar(*)@sql='......'
    if(@orderType =1)
     begin
      select @sql += 'order by '..
     end
    else if(@orderType =2)
     begin
      select @sql += 'order by '..
     endexec @sql
      

  4.   

    declare @i int
    set @i = 0select * from 表 order by case @i when 0 then 排序依据0 when 1 then  排序依据1 end
      

  5.   

    order by @orderType
    @orderType直接传入需要排序的字段名称
    还可以加一个参数,用于是ASC,还是DESC的
      

  6.   

    declare @order varchar(100)
    declare @sql varchar(2000)
    set @sql="SELECT [你的字段] FROM [你的表]"if @orderType =1
    set @order='时间字段'
    else
    set @order='分数字段'
    set @sql=@sql+' order by '+ @ordersp_executesql @sql

      

  7.   

    case @orderType when 1 ROW_NUMBER() OVER (ORDER BY xxx ASC) id,
    case @orderType when 2 ROW_NUMBER() OVER (ORDER BY xxx ASC) id,
    end
      

  8.   

    这种写法语法没问题。。但奇怪的是:无论你的 @orderType参数值是什么,他永远都是执行最后一个条件。例如以下:
    rownum = case @order 
    when 1 then ROW_NUMBER() OVER (ORDER BY m.ModelMarketTime desc) 
    when 2 then ROW_NUMBER() OVER (ORDER BY s.TotalScore desc)
    when 3 then ROW_NUMBER() OVER (ORDER BY s.levelid desc)
    when 4 then ROW_NUMBER() OVER (ORDER BY s.seriesid desc)
     end假如我的 @orderType =1 .但是从排序结果来看。他竟然是按照
    when 4 then ROW_NUMBER() OVER (ORDER BY s.seriesid desc)
    这个来排序。。但是他的rownum所显示的值是正确的,也就是说,如果你想要排序正常的话。你必须要在外面用
    select * from (
    sql.....
    )t order by rownum
    这样才会出现你想要的结果。。奇怪!
      

  9.   

    declare @sOrder varchar(100)
    if @orderType =1
     set @sOrder='时间字段'
    else
     set @sOrder='分数字段'begin
    ...
    set @sql=sql+' order by '+ @sOrder
    end