sql - Oracle SQL 中的 If 条件

标签 sql oracle

我正在开发一个遗留系统,许多数据库结构都很糟糕(键/值对)。

我有以下选择语句:

(
    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/

相关文章:

sql - postgresql - 尝试将变量从命令行传递到 sql 脚本时出错

sql - 在 Oracle 中创建 bool 属性?

oracle - Pivotal Cloud Foundry - 连接到外部 oracle 数据库

sql - 在 SQL Server 2008 R2 中使用 PIVOT 表

php - 连接表而不重复,但需要列的所有不同值

java - 如何使用 JdbcTemplate 从 Spring 创建存储函数?

sql - 动态情况下

oracle - 如何在没有控制台的情况下更改 WebLogic 服务器中“Stuck Thread Max Time”的值

sql - Oracle- 拆分字符串逗号分隔(字符串包含空格和连续逗号)

php - 在 PHP MYSQLI 中将 3 个或更多表链接在一起以创建墙源