簡體   English   中英

在 Oracle SQL 中帶有查詢的 Cast 和 Case 語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM