我有一個表格,將客戶的“PreOrder”編號和“PostOrder”編號存盤在同一列中。我正在嘗試撰寫一個案例陳述,以評估患者是否具有“PreOrder”編號和/或“PostOrder”編號之一。有三個不同的數字可以代表一個“PreOrder”,兩個不同的數字代表一個“PostOrder”。如果客戶有“PreOrder”號碼之一,我想退回“Pre”。如果客戶有“PostOrder”號碼之一,我想退回“Post”。如果客戶擁有“PreOrder”號碼之一和“PostOrder”號碼之一,我想回傳“BothOrders”。這是我的查詢...
SELECT
Cust.Cust_ID
, CASE WHEN Cust.Order_ID in ('154','3042000103','3042000099') THEN 'PreOrder'
WHEN Cust. Order_ID in ('30400010112','3042000104') THEN 'PostOrder'
WHEN Cust. Order_ID in ('154','3042000103','3042000099') and Cust. Order_ID in ('30400010112','3042000104') THEN 'BothOrders'
END as Orders
From Customer as Cust
GROUP BY Cust.Cust_ID
這不起作用,因為它沒有為擁有“PreOrder”和“PostOrder”號碼之一的客戶回傳“BothOrders”。訂單列中的
值為 (154,3042000103, 3042000099, 30400010112, 3042000099)。
我期待這樣的事情......

但我越來越...

uj5u.com熱心網友回復:
第一個問題是您需要重新排序WHEN條件以Both Orders首先列出。CASE運算式在第一次匹配后停止計算。
第二個問題是一個單一的值,Cust.Cust_ID不可能同時有一個單一的Cust_ID值。但是我不能告訴你如何解決這個問題,因為我看不到其余的查詢或資料。15430400010112
第三個問題是查詢中沒有FROM子句,所以資料庫不知道要看什么表。
uj5u.com熱心網友回復:
你的代碼中有錯字
WHEN Cust. Order_ID in ('154','3042000103','3042000099') and Cust. Order_ID in ('30400010112','3042000104') THEN 'BothOrders’
'BothOrders' 引號不匹配,而是嘗試 'BothOrders' 像:
WHEN Cust. Order_ID in ('154','3042000103','3042000099') and Cust. Order_ID in ('30400010112','3042000104') THEN 'BothOrders'
uj5u.com熱心網友回復:
做幾個假設...
with
cust as (
select
cust_id,
case when order_id in ('154','3042000103','3042000099') then 1 else 0 end as pre_order,
case when order_id in ('30400010112','3042000104') then 1 else 0 end as post_order
from
Customer
)
select
cust_id,
case
when sum(pre_order) > 0 and sum(post_order) > 0 then 'BothOrders'
when sum(post_order) > 0 then 'PostOrder'
when sum(pre_order) > 0 then 'PreOrder'
else null
end as orders
from
cust
group by
cust_id
uj5u.com熱心網友回復:
您需要確定每個客戶是否有一組唯一的訂單型別。
即使評估的順序是正確的,您也無法使用簡單的 case 運算式對此進行評估,因為您需要評估所有客戶的行;您可以解決此問題的另一種方法是首先定義兩個可能的組,然后評估它們對于客戶是否相同,例如:
with t as (
select *,
case when order_id in ('30400010112','3042000104') then 'Post' else 'Pre' end type
from Customer
)
select distinct CustId,
case when min(type) over(partition by CustId)
= max(type) over(partition by CustId) then type else 'Both'
end as Orders
from t;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/528814.html
標籤:sql案子
上一篇:「組合數學」隔離區
