【发布时间】: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)
【问题讨论】: