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

SQL Server COALESCE() 函數實戰:姓名串聯與薪資計算兩大經典應用

     編輯:關於SqlServer

COALESCE() 核心邏輯

接受一組運算式,回傳第一個非 NULL 值;若全為 NULL 則回傳 NULL。

COALESCE(運算式1, 運算式2, ..., 運算式N)

應用一:靈活串聯人名(處理中間名缺失)

資料表 Persons 欄位:FirstName、MiddleName、LastName

SELECT FirstName + ' ' + COALESCE(MiddleName, '') + ' ' + COALESCE(LastName, '')
FROM Persons

輸出範例:

  • John A. MacDonald
  • Franklin D. Roosevelt
  • Madonna(無中間名、姓氏)
  • Cher(僅單名)

封裝為函數重複使用

CREATE FUNCTION dbo.WholeName (@first VARCHAR(50), @middle VARCHAR(50), @last VARCHAR(50))
RETURNS VARCHAR(150)
AS BEGIN
    DECLARE @Result VARCHAR(150)
    SELECT @Result = LTRIM(@first + ' ' + COALESCE(@middle, '') + ' ') + COALESCE(@last, '')
    RETURN @Result
END

呼叫範例:

SELECT dbo.WholeName('James', NULL, 'Bond')      -- James Bond
SELECT dbo.WholeName('Cher', NULL, NULL)         -- Cher
SELECT dbo.WholeName('John', 'F.', 'Kennedy')    -- John F. Kennedy

關鍵修正:使用 LTRIM 移除中間名缺失時產生的雙空白。

應用二:彈性薪資計算(多種薪資結構並存)

PayDay 表包含多種薪資欄位,每位員工僅適用其中一種:

EmployeeIDHourlyWageHoursPerWeekAmountPerPiecePiecesThisWeekWeeklySalaryCommissionThisWeek
118.0040NULLNULLNULLNULL
2NULLNULL4.00400NULLNULL
3NULLNULLNULLNULL800.00NULL
4NULLNULLNULLNULL500.00600

單一查詢計算總薪資:

SELECT EmployeeID,
    COALESCE(HourlyWage * HoursPerWeek, 0) +
    COALESCE(AmountPerPiece * PiecesThisWeek, 0) +
    COALESCE(WeeklySalary + CommissionThisWeek, 0) AS Payment
FROM PayDay

結果:

  • 員工 1:720.00(時薪制)
  • 員工 2:1600.00(計件制)
  • 員工 3:800.00(週薪制)
  • 員工 4:1100.00(底薪+業績獎金)

進階:計算欄位自動化

ALTER TABLE PayDay
ADD Payment AS
    COALESCE(HourlyWage * HoursPerWeek, 0) +
    COALESCE(AmountPerPiece * PiecesThisWeek, 0) +
    COALESCE(WeeklySalary + CommissionThisWeek, 0)

之後直接 SELECT * 即含預算薪資欄位,效能最佳。

總結

COALESCE() 是處理「多種互斥資料結構、選取首個有效值」的利器,適用於視圖、預存程序、計算欄位等多種場合。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved