【问题标题】:PL/SQL - How to use CASE in JOIN ON specific conditionPL/SQL - 如何在 JOIN ON 特定条件下使用 CASE
【发布时间】:2021-01-15 00:58:22
【问题描述】:

能否请教如何在下面实现?

我将加入下面的子查询 (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)

【问题讨论】:

    标签: sql oracle join case


    【解决方案1】:

    你可以使用:

           ON  q.quote_ref = quote_history.quote_ref AND
               (quote_history.rown = 1 or q.quote_description <> 'XYZ')
    

    注意:这里假设q.quote_description 永远不是NULL。如有必要,可以为此调整逻辑(否则只会使想法复杂化)。

    【讨论】:

    • 谢谢!这就是我想要实现的目标,它对我来说很好编辑:是的,quote_description 永远不是 NULL,这些情况在查询的前面被排除
    猜你喜欢
    • 1970-01-01
    • 2019-05-18
    • 2021-01-11
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    相关资源
    最近更新 更多