oraclesql中带查询的cast和case语句

camsedfj  于 2021-08-13  发布在  Java
关注(0)|答案(3)|浏览(495)

我目前正在编辑一个视图,并尝试将字段“doctorate”转换为yes、no或unknown,基于一个case语句,该语句由两个表连接,然后连接到视图。
在from子句“expecting”或“as”附近有一个错误,但添加这些字符时仍然会出错。感谢您的帮助!谢谢
请看下面我的代码摘录:

  1. CAST (
  2. CASE
  3. WHEN D.DEGREE_HIERARCHY >= 40
  4. THEN 'Yes'
  5. WHEN D.DEGREE_HIERARCHY < 40
  6. THEN 'No'
  7. WHEN D.DEGREE_HIERARCHY IS NULL
  8. THEN 'Unknown'
  9. ELSE
  10. NULL
  11. END
  12. FROM DEGREE_CROSSWALK D, VPAA V
  13. WHERE
  14. V.FACULTY_DEGREE_CODE = D.DEGREE_CODE
  15. AND V.PERSON_SKEY = SRC.PERSON_SKEY
  16. AND V.CURRENT_DEGREE = '1'
  17. AS VARCHAR2 (50))
  18. DOCTORATE,
ovfsdjhp

ovfsdjhp1#

我不知道你为什么在里面使用整个查询 CAST ,但如果您使用 SELECT 以及 () 如下:(参见代码中的内联注解)

  1. SELECT CAST (
  2. (SELECT CASE -- added ( and SELECT here
  3. WHEN D.DEGREE_HIERARCHY >= 40
  4. THEN 'Yes'
  5. WHEN D.DEGREE_HIERARCHY < 40
  6. THEN 'No'
  7. WHEN D.DEGREE_HIERARCHY IS NULL
  8. THEN 'Unknown'
  9. ELSE
  10. NULL
  11. END
  12. FROM DEGREE_CROSSWALK D, VPAA V
  13. WHERE
  14. V.FACULTY_DEGREE_CODE = D.DEGREE_CODE
  15. AND V.PERSON_SKEY = SRC.PERSON_SKEY
  16. AND V.CURRENT_DEGREE = '1') -- added ending bracket ) here
  17. AS VARCHAR2 (50)) FROM DUAL
展开查看全部
vfhzx4xs

vfhzx4xs2#

我相信你需要这个:

  1. select CASE WHEN D.DEGREE_HIERARCHY >= 40 THEN
  2. cast('Yes' as varchar(20))
  3. WHEN D.DEGREE_HIERARCHY < 40 THEN
  4. cast('No' as varchar(20))
  5. WHEN D.DEGREE_HIERARCHY IS NULL THEN
  6. cast('Unknown' as varchar(20))
  7. ELSE
  8. NULL
  9. END name_of_column -- Here the case clause ends and you can name the column
  10. FROM DEGREE_CROSSWALK D --add other tables and join condition here
  11. WHERE --add other conditions of the where clause

另外,我建议您不要这样连接表:

  1. FROM DEGREE_CROSSWALK D, VPAA V
  2. WHERE V.FACULTY_DEGREE_CODE = D.DEGREE_CODE

但就像这样(只是一个例子):

  1. FROM DEGREE_CROSSWALK D
  2. JOIN VPAA V ON V.FACULTY_DEGREE_CODE = D.DEGREE_CODE
展开查看全部
syqv5f0l

syqv5f0l3#

首先将cast函数强制转换为数据类型,或者删除该强制转换。

  1. SELECT CAST((SELECT CASE WHEN D.DEGREE_HIERARCHY >= 40
  2. THEN 'Yes'
  3. WHEN D.DEGREE_HIERARCHY < 40
  4. THEN 'No'
  5. WHEN D.DEGREE_HIERARCHY IS NULL
  6. THEN 'Unknown'
  7. ELSE NULL
  8. END
  9. FROM DEGREE_CROSSWALK D, VPAA V
  10. WHERE V.FACULTY_DEGREE_CODE = D.DEGREE_CODE
  11. AND V.PERSON_SKEY = SRC.PERSON_SKEY
  12. AND V.CURRENT_DEGREE = '1') AS VARCHAR2 (50)) AS DOCTORATE
  13. FROM DUAL

相关问题