購買零件與自製零件同屬「零件」,經理與工人同屬「員工」。多實體共用表時,傳統做法用 CASE 逐行判斷實體類型再回傳不同結果。
COALESCE(expression_1, expression_2, ..., expression_n)
回傳第一個非空運算式值;全為空則回傳 NULL。
大多數含空值運算式結果為空值 (例外:連接運算子 ||)。如:NULL + 值 = NULL、NULL * 值 = NULL。利用此特性構建有序運算式鏈,首個非空即為結果,等同 CASE 邏輯。
PART_ID NUMBER(6) NOT NULL
PART_TYPE CHAR(1) NOT NULL -- 'P'=購買, 'B'=自製
PURCHASE_COST NUMBER(8,2) -- 購買成本,自製為 NULL
MATERIAL_COST NUMBER(8,2) -- 材料成本,購買為 NULL
MATERIAL_QTY NUMBER(6) -- 材料用量,購買為 NULL
CASE
WHEN PART_TYPE = 'P' THEN PURCHASE_COST
WHEN PART_TYPE = 'B' THEN MATERIAL_QTY * MATERIAL_COST
END
COALESCE(PURCHASE_COST, MATERIAL_QTY * MATERIAL_COST)
購買零件:PURCHASE_COST 非空直接回傳。自製零件:第一參數為空,自動計算第二參數乘積回傳。
SELECT PART_ID "Part", PART_TYPE "Type",
COALESCE(PURCHASE_COST, MATERIAL_QTY * MATERIAL_COST) "Cost"
FROM PARTS;