我正在开发一个遗留系统,许多数据库结构都很糟糕(键/值对)。
我有以下选择语句:
(
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
包含相同的确切信息,我需要检查这两个 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
或第二个键中的值)。
关于sql - Oracle SQL 中的 If 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20746882/