以用户定义的形式组合SQL CASE表达式

以用户定义的形式组合SQL CASE表达式,sql,oracle,case,user-defined-functions,Sql,Oracle,Case,User Defined Functions,我正在尝试使用Oracle数据库在ERP系统中创建一些用户定义的表单。我遇到了一个问题,即较低级别的查询无法从较高级别的字段中提取,因为该字段是从查询中填充的 我的问题是,;有可能把这两种说法结合起来吗 第一个问题: SELECT CASE WHEN VV = 'Y' AND V11 IS NULL OR V11 = 'N' THEN TO_CHAR(V, '999,999,999.00') WHEN V11 = 'Y' AND VV IS NULL OR VV = 'N' THEN TO_CH

我正在尝试使用Oracle数据库在ERP系统中创建一些用户定义的表单。我遇到了一个问题,即较低级别的查询无法从较高级别的字段中提取,因为该字段是从查询中填充的

我的问题是,;有可能把这两种说法结合起来吗

第一个问题:

SELECT
CASE WHEN VV = 'Y' AND V11 IS NULL OR V11 = 'N' THEN TO_CHAR(V, '999,999,999.00')
WHEN V11 = 'Y' AND VV IS NULL OR VV = 'N' THEN TO_CHAR(V1, '999,999,999.00')
ELSE ' '
END
FROM V_UD_TOOL_RFQ 
WHERE PARENT_ID = :ID
此查询提取正确的数据并提供字段G,但导致下面的查询出错

另外,在上面的语句中没有转换为_CHAR,我收到了错误“ORA-00932:不一致的数据类型:预期的数字得到了CHAR”还有其他方法吗

后一个问题:

SELECT 
CASE WHEN E = 0 THEN 1 
ELSE ROUND(((G+H+I) / J),2)
END
FROM V_UD_TOOL_RFQ 
WHERE PARENT_ID = :ID
我已经尝试过了,但出现错误“ORA-00905:缺少关键字”

我最终尝试为第二个查询中的所有字段(G、H、I、J)创建第一个CASE表达式

在此方面的任何帮助都将不胜感激

一个
case
语句的所有分支必须返回相同的数据类型
因此,在这方面:

SELECT
CASE WHEN VV = 'Y' AND V11 IS NULL OR V11 = 'N' THEN TO_CHAR(V, '999,999,999.00')
WHEN V11 = 'Y' AND VV IS NULL OR VV = 'N' THEN TO_CHAR(V1, '999,999,999.00')
ELSE ' '
END
FROM V_UD_TOOL_RFQ 
WHERE PARENT_ID = :ID
如果将
删除到\u CHAR
,则会出现错误,因为ELSE分支返回字符串
如果要返回
0
而不是
'
,可以执行以下操作:

SELECT
CASE WHEN VV = 'Y' AND V11 IS NULL OR V11 = 'N' THEN V
WHEN V11 = 'Y' AND VV IS NULL OR VV = 'N' THEN V1
ELSE 0
END
FROM V_UD_TOOL_RFQ 
WHERE PARENT_ID = :ID
在最后一个查询中:

SELECT 
CASE 
  WHEN E = 0 THEN 1 
  ELSE 
    CASE 
      WHEN VV = 'Y' AND V11 IS NULL OR V11 = 'N' THEN TO_CHAR(((V+H+I)/J), '999,999,999.00')
      WHEN V11 = 'Y' AND VV IS NULL OR VV = 'N' THEN TO_CHAR(((V1+H+I)/J), '999,999,999.00')
    END
FROM V_UD_TOOL_RFQ 
WHERE PARENT_ID = :ID
您在另一个
案例中嵌套了一个
案例
,您忘记了最后一个
结尾

此外,返回的数据类型与这两个分支不同
也许换个说法:

SELECT 
  CASE 
    WHEN E = 0 THEN 1 
    ELSE 
      CASE 
        WHEN VV = 'Y' AND V11 IS NULL OR V11 = 'N' THEN (V+H+I)/J
        WHEN V11 = 'Y' AND VV IS NULL OR VV = 'N' THEN (V1+H+I)/J
      END
  END
FROM V_UD_TOOL_RFQ 
WHERE PARENT_ID = :ID  

格表达式!谢谢你帮我把它拆了!
SELECT 
  CASE 
    WHEN E = 0 THEN 1 
    ELSE 
      CASE 
        WHEN VV = 'Y' AND V11 IS NULL OR V11 = 'N' THEN (V+H+I)/J
        WHEN V11 = 'Y' AND VV IS NULL OR VV = 'N' THEN (V1+H+I)/J
      END
  END
FROM V_UD_TOOL_RFQ 
WHERE PARENT_ID = :ID