Case
帶有 OR AND 的 CASE 表達式
我有 5 列 - 訂單、運輸、跟踪、傳遞和整體狀態。
我有 4 個狀態,綠色表示“好”,琥珀表示“好”,黃色表示“一般”,紅色表示“壞”。
我希望在所有狀態中的“總體狀態”列中顯示最差狀態。
我想在 CASE 聲明中使用這個
Case When Order = Green, shipping = Yellow, tracking = Green, Delivery = Red then Overallstaus = Red When Order = Amber, shipping = Yellow, tracking = Green, Delivery = Green then Overallstaus = Yellow When Order = Yellow, shipping = Yellow, tracking = Green, Delivery = Red then Overallstaus = Red When Order = Amber, shipping = Green, tracking = Green, Delivery = Green then Overallstaus = Amber
另一種解決方案是,如果您將列中的狀態名稱儲存在單獨的狀態“列舉”表中,該表以從最佳到最差的遞增順序儲存 ID,那麼您可以根據您使用的數據庫系統執行以下操作( T-SQL):
SELECT ( SELECT MAX(OverallStatusId) FROM ( VALUES (OrderStatusId),. (ShippingStatusId),. (TrackingStatusId), (DeliveryStatusId) ) AS OverallStatus(OverallStatusId) ) AS OverallStatusId FROM OrdersTable
然後,您所要做的就是加入上述OverallStatusId 上的Statuses 列舉表以獲取Status 名稱。
如果 DBMS 是 MySQL,您可以使用
SELECT *, FIELD(GREATEST(FIND_IN_SET(order, 'Green,Amber,Yellow,Red'), FIND_IN_SET(shipping, 'Green,Amber,Yellow,Red'), FIND_IN_SET(tracking, 'Green,Amber,Yellow,Red'), FIND_IN_SET(delivery, 'Green,Amber,Yellow,Red')), 'Green', 'Amber', 'Yellow', 'Red') Overallstatus FROM source_table
但我強烈建議標準化您的數據。