select * from a order by a ASC,b desc

解决方案 »

  1.   

    select *from A order by a,case when a=1 then -b else b end
      

  2.   

    select convert(int, a)*convert(decimal(10,2),b) as order1,a,b from a 
    order by order1 desc,a asc只在a 的值为0或1的情况下适用
      

  3.   

    CrazyFor的方法很好!Simple CASE function:CASE input_expression 
        WHEN when_expression THEN result_expression 
            [ ...n ] 
        [ 
            ELSE else_result_expression 
        ] 
    END Searched CASE function:CASE
        WHEN Boolean_expression THEN result_expression 
            [ ...n ] 
        [ 
            ELSE else_result_expression 
        ] 
    END
      

  4.   

    select * from A order by a,case when a=1 then -b else b end
    select * from A order by a,case when a=0 then b else -b end
      

  5.   

    b字段是个字符串,不过里面是数字。为什么这样不行
    SELECT *
    FROM A
    ORDER BY a, CASE WHEN a = 1 THEN -CASE (b AS int) ELSE CASE(b AS int) END
      

  6.   

    TRY:
    SELECT *
    FROM A
    ORDER BY a, CASE WHEN a = 1 THEN cast(-b AS int) ELSE CASt(b AS int) END
      

  7.   

    SELECT *
    FROM A
    ORDER BY a, CASE WHEN a = 1 THEN -CAST (b AS int) ELSE CAST(b AS int) END
      

  8.   

    create table #p (a int,b char(10))insert #p values (1,'dae')
    insert #p values (1,'efe')
    insert #p values (0,'q')
    insert #p values (0,'eve')
    insert #p values (0,'mm')
    insert #p values (1,'a')
    insert #p values (1,'sleonb')
    insert #p values (1,'gedd')
    SELECT *
    FROM #p
    ORDER BY a, CASE WHEN a = 1 THEN -CAST (b AS int) ELSE CAST(b AS int) END
    不行
      

  9.   

    TRY:
    SELECT *
    FROM #p
    ORDER BY a, CASE WHEN a = 1 THEN reverse(left(rtrim(b)+'zzzzzzzzzz',10)) ELSE b END