返回多行时带有 case 的 sql 查询

标签 sql oracle

我正在尝试使用 case when 条件进行查询以查看我将显示的列表,但我遇到此错误 ORA-01427: single-row subquery returns more than one row .

查询是这样的:

SELECT
CASE WHEN action_type like 'Trigger Severity' THEN (select cast(SEVERITY as varchar2(255)) name from SURV_TRIGGER_SEVERITY_LIST)
     WHEN action_type like 'Host Group'  then (select cast(name as varchar2(255)) name from Surv_List.groups)
     WHEN action_type like 'Host'  then (select cast(name as varchar2(255)) name from tn_tree)
     END display_value
FROM surv_action_type_list
WHERE id = 0

是否可以在 case 条件中调用多行查询?

最佳答案

我会分多个步骤执行此操作。获取操作类型,然后发出适当的查询。您是在前端还是在存储过程中使用此逻辑由您决定,并且可能取决于很多其他因素。

如果你绝对需要这样做,那么你可以尝试这样的事情:

SELECT
    SQ.display_value
FROM
    surv_action_type_list SATL
INNER JOIN
    (
    SELECT
        'Trigger Severity' action_type,
        CAST(severity AS VARCHAR2(255)) display_value
    FROM
        SURV_TRIGGER_SEVERITY_LIST
    UNION ALL
    SELECT
        'Host Group' action_type,
        CAST(name AS VARCHAR2(255) display_value
    FROM
        Surv_List.groups
    UNION ALL
    SELECT
        'Host' action_type,
        CAST(name AS VARCHAR2(255) display_value
    FROM
        tn_tree
    ) SQ ON
    SQ.action_type = SATL.action_type
WHERE
    SATL.id = 0

关于返回多行时带有 case 的 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7125668/

相关文章:

php - 在 CakePHP 中为连接表的列创建验证规则

SQL为什么使用 'between'而不是 '>= and <='

oracle - JDBC 瘦驱动程序的 NLS_LANG 设置?

oracle - ORA-01830: 日期格式图片在转换整个输入字符串之前结束,尽管使用 TO_TIMESTAMP

mysql - 您可以使用触发器修改插入时的外键吗?

sql - 关系数据库是否为流程历史学家提供了可行的后端?

mysql - sql如何删除具有合并值的重复记录?

mysql - 从 CSV 加载数据时遇到错误时,是否有办法跳过行? (错误代码: 1261)

oracle - 如何将 SQL 触发器转换为 liquibase

node.js - 使用 Node js 从 Oracle AQ 中提取消息