在Oracle中使用CASE表达式

时间:2019-10-24 09:18:04

标签: oracle

我有一种情况,如果用户提示(1或0)= 1,那么它必须从对偶返回值,否则必须返回其他表数据

在查询下面,我已经尝试过:但是出现错误:值太多

with CTE_ACC_FNKEYS AS (
(select 
CASE WHEN 1=1
--@Prompt('Users:','A','Customer\Customer Account\Source System Code',Mono,Free,Not_Persistent,,User:3) is not null
then (select  e,f,g,h  from dual)
else
   (
   SELECT
      a,b,c,d
   FROM
       TABLE ( BI_RPT.GET_ACCOUNTDETAILS( 'ON897451','[SA].[0]') ))

end as b  from dual      
))

select * from CTE_ACC_FNKEYS

2 个答案:

答案 0 :(得分:0)

@Ankit Bajpai评论后,您只能选择一个值。像这样:

with CTE_ACC_FNKEYS AS (
(select 
CASE WHEN 1=1
then (select '0' from dual)
else
   (
   SELECT
      'a'||'b'||'c'||'d'
   FROM
      dual)

end as b  from dual      
))

select * from CTE_ACC_FNKEYS;

Demo.如果您需要除此以外的其他内容,请更详细地说明并提供一些您希望得到的结果示例。干杯!

答案 1 :(得分:0)

您的代码及其解释似乎很混乱,但是我认为您尝试根据用户输入返回不同的结果。毫无疑问,不能将此逻辑合并到BI_RPT.GET_ACCOUNTDETAILS()中是有充分的理由的,但是用CASE解决它不是正确的方法。

一种解决方案是编写包装函数。但是最接近您当前代码的解决方案是UNION。

select a, b , c, d
from   TABLE ( BI_RPT.GET_ACCOUNTDETAILS( 'ON897451','[SA].[0]') ))
where &&p_user_input = 0
union
select 0, 0, 0 , 0 -- or whatever is represented by e, f, g, h
from  dual
where &&p_user_input != 0