如何解决PL / SQL-如何在特定条件下在JOIN ON中使用CASE
能否请您提出以下建议?
我要在带有引用表(q)的子查询(quote_history)下面加入。
请注意,每个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,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
。如有必要,可以为此调整逻辑(否则只会使想法变得复杂)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。