[英]PL/SQL - How to use CASE in JOIN ON specific condition
你能否請教如何在下面實現?
我在子查詢(quote_history)下面加入報價表(q.)。
請注意,我為每個quote_ref 得到2 行。
目前它通過quote_ref加入,但我想添加CASE,如果q.quote_description = 'XYZ'然后加入quote_history.rown = 1(在這種情況下我只想要第一行),否則忽略另一個AND(離開僅由 quote_ref 提供)
例如。 對於 q.quote_description = 'XYZ' 我想得到類似的東西
LEFT JOIN (SELECT quote_ref
,activity_date_key
,quote_status_key
,ROW_NUMBER() OVER (PARTITION BY quote_ref ORDER BY activity_date_key) rown
,COUNT(*) OVER (PARTITION BY quote_ref, quote_status_key) max_rown
FROM [...]
) quote_history
ON q.quote_ref = quote_history.quote_ref
AND quote_history.rown = 1 --this is only when q.quote_description = 'XYZ'
但對於其他情況(q.quote_description <> 'XYZ')我只想要
LEFT JOIN (SELECT quote_ref
,activity_date_key
,quote_status_key
,ROW_NUMBER() OVER (PARTITION BY quote_ref ORDER BY activity_date_key) rown
,COUNT(*) OVER (PARTITION BY quote_ref, quote_status_key) max_rown
FROM [...]
) quote_history
ON q.quote_ref = quote_history.quote_ref
或者(但我認為這是更丑陋的解決方案)我也可以得到類似的東西
JOIN [...]
ON q.quote_ref = quote_history.quote_ref
AND IF q.quote_description = 'XYZ' THEN quote_history.rown in (1)
ELSE quote_history.rown in (1,2)
您可以使用:
ON q.quote_ref = quote_history.quote_ref AND
(quote_history.rown = 1 or q.quote_description <> 'XYZ')
注意:這假設q.quote_description
從不為NULL
。 如有必要,可以為此調整邏輯(否則它只會使想法復雜化)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.