接受一組運算式,回傳第一個非 NULL 值;若全為 NULL 則回傳 NULL。
COALESCE(運算式1, 運算式2, ..., 運算式N)
資料表 Persons 欄位:FirstName、MiddleName、LastName
SELECT FirstName + ' ' + COALESCE(MiddleName, '') + ' ' + COALESCE(LastName, '')
FROM Persons
輸出範例:
John A. MacDonaldFranklin D. RooseveltMadonna(無中間名、姓氏)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 表包含多種薪資欄位,每位員工僅適用其中一種:
| EmployeeID | HourlyWage | HoursPerWeek | AmountPerPiece | PiecesThisWeek | WeeklySalary | CommissionThisWeek |
|---|---|---|---|---|---|---|
| 1 | 18.00 | 40 | NULL | NULL | NULL | NULL |
| 2 | NULL | NULL | 4.00 | 400 | NULL | NULL |
| 3 | NULL | NULL | NULL | NULL | 800.00 | NULL |
| 4 | NULL | NULL | NULL | NULL | 500.00 | 600 |
單一查詢計算總薪資:
SELECT EmployeeID,
COALESCE(HourlyWage * HoursPerWeek, 0) +
COALESCE(AmountPerPiece * PiecesThisWeek, 0) +
COALESCE(WeeklySalary + CommissionThisWeek, 0) AS Payment
FROM PayDay
結果:
ALTER TABLE PayDay
ADD Payment AS
COALESCE(HourlyWage * HoursPerWeek, 0) +
COALESCE(AmountPerPiece * PiecesThisWeek, 0) +
COALESCE(WeeklySalary + CommissionThisWeek, 0)
之後直接 SELECT * 即含預算薪資欄位,效能最佳。
COALESCE() 是處理「多種互斥資料結構、選取首個有效值」的利器,適用於視圖、預存程序、計算欄位等多種場合。