我在旧系统上工作,许多数据库结构都很糟糕(键/值对)。
我有以下选择语句:
(
SELECT D.F_VALUE
FROM T_WEB_QUOTES_DATA D
WHERE
D.F_QUOTE_ID = TO_CHAR(VR_RENTAL.QUOTEID)
AND D.F_KEY = 'Secondary_Driver_Forename'
) AS "SECONDARY_DRIVER_FORENAME"
如您所见,它正在寻找一个F_Key
列的值为的记录Secondary_Driver_Forename
。问题是还有另一个F_Key
拥有相同的确切信息,我需要检查两个键。
所以我想做的是:
如果没有记录,其中F_Key = Secondary_Driver_Forename或存在这样的记录,但是该值是空字符串或null,那么我想去查找F_Key所在的记录,2ndary_Driver_FirstName
如果该记录不存在(或null),我想返回一个字符串说No Key
如何在Oracle SQL中实现这一目标?
我在想这样的事情:
(
SELECT (case when max(case when D.F_KEY in 'Secondary_Driver_Forename' then 1 else 0 end) = 1
then max(case when D.F_KEY in 'Secondary_Driver_Forename' then D.F_VALUE end)
else max(D.F_Value)
end)
FROM T_WEB_QUOTES_DATA D
WHERE
D.F_QUOTE_ID = TO_CHAR(VR_RENTAL.QUOTEID)
AND D.F_KEY in ('Secondary_Driver_Forename', '2ndary_Driver_FirstName')
) AS "SECONDARY_DRIVER_FORENAME";
即,对值进行条件汇总。如果存在主值,则使用它。否则,只需选择其中的值(NULL
或第二个键中的值)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句