簡體   English   中英

PL/SQL - 如何在 JOIN ON 特定條件下使用 CASE

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM