CASE中的多个ORDER BY

m.e*_*son 4 sql t-sql sql-server sql-server-2005

我有一个select语句,结尾如下:

order by case @pcsort
            when '' then compcode asc
            else received asc, compcode asc
        end
Run Code Online (Sandbox Code Playgroud)

基本上我需要它,如果@pcsort是""然后命令由compcode由,逾期您的订单receivedcompcode的顺序.

有任何想法吗?

gbn*_*gbn 7

假设数据类型兼容,这将执行您想要的操作

order by
    case @pcsort
            when '' then compcode
            else received
    end ASC, 
    compcode ASC
Run Code Online (Sandbox Code Playgroud)

更一般地说,假设数据类型兼容,则每个排序列需要一个CASE

order by
    case @pcsort
            when '' then compcode
            else received
    end ASC, 
    case @pcsort
           --safe to sort on same column agaon , or use a constant
            when '' then compcode or <constant of same type as compcode>
            else compcode
    end ASC
Run Code Online (Sandbox Code Playgroud)

如果数据类型不兼容,则需要更多案例和大量常量

order by
case @pcsort
        when '' then compcode
        else <constant of same type as compcode>
end ASC, 
    case @pcsort
        when '' then <constant of same type as received>
        else received
end ASC, 
case @pcsort
        when '' then <constant of same type as compcode>
        else compcode
end ASC
Run Code Online (Sandbox Code Playgroud)