我試圖通過使用 CASE WHEN 來確定某些東西來創建一個標志,但它一直回傳“single_state” - 我猜是因為它沒有將 CASE WHEN 應用于所有具有 o/n 1234 的行,這是我需要幫助的位。
我的預期輸出是前 3 行具有“multi_state”,因為它們都是相同的 o/n,而最后一行具有“single_state”,因為它既沒有分組也沒有獲得超過 1 個狀態。
下面的例子:
資料表
o/n sku order_type state state_check
1234 ABC987 Grouped express
1234 BCD654 Grouped arrived
1234 CDF321 Grouped shipped
5679 GBT104 Not Grouped express
詢問
SELECT o/n, SKU, order_type, state,
CASE WHEN order_type is "Grouped" AND (state = "express" AND state = "arrived") THEN "multi_state"
CASE WHEN order_type is "Grouped" AND (state = "express" AND state = "shipped") THEN "multi_state"
ELSE "single_state"
END AS state_check
FROM data.table
uj5u.com熱心網友回復:
兩個檢查的CASEsmulti_state同時state具有值express和arrived/ shipped。單個列不能同時具有多個值。
您可以使用以下IN()方式接受多個值multi_state:
SELECT o/n
, sku
, order_type
, state
, CASE
WHEN order_type = 'Grouped' AND state IN('express', 'arrived', 'shipped') THEN 'multi_state'
ELSE 'single_state'
END AS state_check
FROM data.table
uj5u.com熱心網友回復:
您需要一個視窗函式(帶有OVER子句的聚合函式)來一次查看多行。
SELECT
"o/n", sku, order_type, state,
CASE
WHEN order_type <> 'Grouped' THEN
'single_state'
WHEN COUNT(DISTINCT state) OVER (PARTITION BY "o/n", order_type) = 1 THEN
'single_state'
ELSE
'multi_state'
END
FROM data.table
ORDER BY "o/n", sku;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/399474.html
