Oracle SQL:where 子句中的 Case 语句 returns 出错 "single-row subquery returns more than one row"

Oracle SQL: Case Statement in where clause returns an error "single-row subquery returns more than one row"

这是一个带有 CASE 条件语句的 select 查询的 where 子句。我写这个是为了满足以下要求:“如果是工作日,结果将包含第二天的日期,如果是星期五,结果将包括星期六、星期日和星期一的日期”

where DTTM IN (case 
                      when to_char(sysdate,'day') <> 'friday   ' then to_date(sysdate+1,'DD/MON/YY')
                      else (select to_date(sysdate+1,'DD/MM/YYYY') + level - 1 ddate
                            from dual
                            connect by level <= to_date(sysdate+4,'DD/MM/YYYY') - to_date(sysdate+1,'DD/MM/YYYY')
                            )
                end)

我也用过IN,但是我收到一个错误

ORA-01427: single-row subquery returns more than one row

  1. 00000 - "single-row subquery returns more than one row"

请帮我解决这个错误。

完整的查询供您参考:

      select * from orders 
      where DTTM IN (case 
                                when to_char(sysdate,'day') <> 'friday   ' then to_date(sysdate+1,'DD/MON/YY')
                                else (select to_date(sysdate+1,'DD/MM/YYYY') + level - 1 ddate
                                      from dual
                                      connect by level <= to_date(sysdate+4,'DD/MM/YYYY') - to_date(sysdate+1,'DD/MM/YYYY')
                                      )
                                end) 
      order by  DTTM; 

尝试以下解决方案。

SELECT * FROM orders 
WHERE dttm = to_date(SYSDATE+1,'DD/MON/YY')
AND TO_CHAR(SYSDATE,'day') <> 'friday'
UNION ALL
SELECT * FROM orders 
where dttm IN (SELECT TO_DATE(SYSDATE+1,'DD/MM/YYYY') + level - 1 ddate
               FROM dual
               CONNECT BY LEVEL <= to_date(sysdate+4,'DD/MM/YYYY') - to_date(sysdate+1,'DD/MM/YYYY')
               )
AND to_char(sysdate,'day') = 'friday'

如果不是星期五,第一个查询将 运行。如果是星期五,则不会 return 任何结果。 UNION ALL 之后的查询将仅在星期五 运行。只有查询 return 个结果。