首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

資料庫查詢結果動態排序(七):使用欄位編號參數、CASE 運算式與數值欄位排序技巧

     編輯:關於SqlServer

以欄位編號作為排序參數

替代欄位名稱,使用數字代表排序依據欄位。核心邏輯同樣使用 CASE 運算式根據編號決定排序欄位。

Listing 7:欄位編號參數版 GetSortedShippers
ALTER PROC GetSortedShippers
    @ColNumber AS INT
AS
SELECT *
FROM Shippers
ORDER BY
    CASE @ColNumber
        WHEN 1 THEN 
            CASE SIGN(ShipperID)
                WHEN -1 THEN '-'
                WHEN 0 THEN '+'
                WHEN 1 THEN '+'
                ELSE NULL
            END +
            RIGHT(REPLICATE('0', 10) + CAST(ABS(ShipperID) AS VARCHAR(10)), 10)
        WHEN 2 THEN CompanyName
        WHEN 3 THEN Phone
        ELSE NULL
    END

數值欄位排序字串化技巧

針對 ShipperID 數值欄位,透過 SIGN 判斷正負、ABS 取絕對值、REPLICATE 左補零、RIGHT 取固定寬度,確保字串排序等同數值排序。

替代方案:Richard 方法

將 ORDER BY 拆分為三個獨立 CASE 運算式,各處理一個欄位,避免單一 CASE 僅能回傳單一資料類型的限制,且無需資料類型轉換。

呼叫範例

EXEC GetSortedShippers 1  -- 依 ShipperID 排序
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved