[英]Cast and Case statement with query in Oracle SQL
我目前正在編輯一個視圖並嘗試根據由 2 個表連接然后連接到視圖的案例語句將字段“Doctorate”轉換為是、否或未知。
我在 from 子句“Expecting ) or AS”附近有一個錯誤,但是在添加這些字符時我仍然得到一個錯誤。 任何幫助表示贊賞! 謝謝
請參閱下面我的代碼摘錄:
CAST (
CASE
WHEN D.DEGREE_HIERARCHY >= 40
THEN 'Yes'
WHEN D.DEGREE_HIERARCHY < 40
THEN 'No'
WHEN D.DEGREE_HIERARCHY IS NULL
THEN 'Unknown'
ELSE
NULL
END
FROM DEGREE_CROSSWALK D, VPAA V
WHERE
V.FACULTY_DEGREE_CODE = D.DEGREE_CODE
AND V.PERSON_SKEY = SRC.PERSON_SKEY
AND V.CURRENT_DEGREE = '1'
AS VARCHAR2 (50))
DOCTORATE,
我不確定您為什么在CAST
中使用整個查詢,但是如果您使用SELECT
和()
如下:(請參閱代碼中的內聯注釋)
SELECT CAST (
(SELECT CASE -- added ( and SELECT here
WHEN D.DEGREE_HIERARCHY >= 40
THEN 'Yes'
WHEN D.DEGREE_HIERARCHY < 40
THEN 'No'
WHEN D.DEGREE_HIERARCHY IS NULL
THEN 'Unknown'
ELSE
NULL
END
FROM DEGREE_CROSSWALK D, VPAA V
WHERE
V.FACULTY_DEGREE_CODE = D.DEGREE_CODE
AND V.PERSON_SKEY = SRC.PERSON_SKEY
AND V.CURRENT_DEGREE = '1') -- added ending bracket ) here
AS VARCHAR2 (50)) FROM DUAL
首先通過將其強制轉換為數據類型或刪除強制轉換來完成強制轉換 function。
SELECT CAST((SELECT CASE WHEN D.DEGREE_HIERARCHY >= 40
THEN 'Yes'
WHEN D.DEGREE_HIERARCHY < 40
THEN 'No'
WHEN D.DEGREE_HIERARCHY IS NULL
THEN 'Unknown'
ELSE NULL
END
FROM DEGREE_CROSSWALK D, VPAA V
WHERE V.FACULTY_DEGREE_CODE = D.DEGREE_CODE
AND V.PERSON_SKEY = SRC.PERSON_SKEY
AND V.CURRENT_DEGREE = '1') AS VARCHAR2 (50)) AS DOCTORATE
FROM DUAL
我相信你需要這個:
select CASE WHEN D.DEGREE_HIERARCHY >= 40 THEN
cast('Yes' as varchar(20))
WHEN D.DEGREE_HIERARCHY < 40 THEN
cast('No' as varchar(20))
WHEN D.DEGREE_HIERARCHY IS NULL THEN
cast('Unknown' as varchar(20))
ELSE
NULL
END name_of_column -- Here the case clause ends and you can name the column
FROM DEGREE_CROSSWALK D --add other tables and join condition here
WHERE --add other conditions of the where clause
另外我建議你不要加入這樣的表:
FROM DEGREE_CROSSWALK D, VPAA V
WHERE V.FACULTY_DEGREE_CODE = D.DEGREE_CODE
但像這樣(只是一個例子):
FROM DEGREE_CROSSWALK D
JOIN VPAA V ON V.FACULTY_DEGREE_CODE = D.DEGREE_CODE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.