[英]Update the column according to order status
輸入:
CUSTOMER_NAME ORDER_ID STATUS
-----------------------------------------------
john j1 delivered
john j2 delivered
david d1 submitted
david d3 created
smith s1 submitted
krish k1 created
一家披薩公司正在接受客戶的訂單,每個披薩訂單都作為一個單獨的訂單添加到他們的數據庫中,每個訂單都有一個關聯的狀態“創建或提交或交付”。 最終狀態是根據狀態計算的,如下所示
當客戶的所有訂單的狀態為已交付時,客戶訂單的最終狀態為“已完成”
如果客戶有一些未交付的訂單和一些已交付的訂單,則最終狀態為“進行中”
如果所有客戶訂單都已提交,則最終狀態為“等待進度”
否則最終狀態為“等待提交”
期望的輸出:
CUSTOMER_NAME FINAL_STATUS
--------------------------------------------------
david IN PROGRESS
john COMPLETED
krish AWAITING SUBMISSION
smith AWAITING PROGRESS
這是一種方法:
select customer_name
, case when count(case when status <> 'created' then 1 end) = 0 then 'awaiting submission'
when count(case when status <> 'submitted' then 1 end) = 0 then 'awaiting progress'
when count(case when status <> 'delivered' then 1 end) > 0 then 'In progress'
when count(case when status <> 'delivered' then 1 end) = 0 then 'Completed'
end
from orders
group by customer_name
您可以旋轉結果,例如:
with pivoted as (
SELECT *
FROM orders
pivot(
count(order_id) for status in (
[delivered], [submitted], [created])
)as pv
)
SELECT
p.CUSTOMER_NAME,
CASE
WHEN delivered>0 AND submitted=0 AND created=0 THEN 'COMPLETED'
WHEN delivered>0 AND (submitted>0 OR created>0) THEN 'IN PROGRESS'
WHEN delivered=0 AND submitted>0 AND created=0 THEN 'AWAITING PROGRESS'
ELSE 'AWAITING SUBMISSION'
END AS FINAL_STATUS
FROM pivoted p
但是您應該注意,在您的問題中,David 所需的輸出是 IN PROGRESS,但根據邏輯定義,對於此輸出,他應該有一個已交付的訂單。
披薩訂單狀態
按客戶名稱排序結果。
select customer_name
, case when count(case when status <> 'CREATED' then 1 end) = 0 then 'AWAITING SUBMISSION'
when count(case when status <> 'SUBMITTED' then 1 end) = 0 then 'AWAITING PROGRESS'
when count(case when status <> 'DELIVERED' then 1 end) > 0 then 'IN PROGRESS'
when count(case when status <> 'DELIVERED' then 1 end) = 0 then 'COMPLETED'
end
from customer_order
group by customer_name
ORDER BY customer_name ASC;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.