我試著寫一個 SQL
SELECT
CASE
WHEN SOURCE_SYSTEM <> 'SHIELD'
THEN NVL(NOMINAL_PREMIUM,PAYABLE_PREMIUM)
WHEN SOURCE_SYSTEM = 'SHIELD' AND UPPER(PRODUCT_NAME_EN) = 'CANCER' AND NVL(NOMINAL_PREMIUM,PAYABLE_PREMIUM) < 100000
THEN 'LESS THAN 100K'
ELSE 'OTHER'
END AS NEW_GROUP
FROM TABLE
我也嘗試了相同的代碼,但有點扭曲
SELECT
CASE
WHEN SOURCE_SYSTEM <> 'SHIELD'
THEN NVL(NOMINAL_PREMIUM,PAYABLE_PREMIUM)
WHEN SOURCE_SYSTEM = 'SHIELD' AND UPPER(PRODUCT_NAME_EN) = 'CANCER' AND TO_NUMBER(NVL(NOMINAL_PREMIUM, PAYABLE_PREMIUM)) < 100000
THEN 'LESS THAN 100K'
ELSE 'OTHER'
END AS NEW_GROUP
FROM TABLE
同樣的錯誤仍然出現:
ORA-00932: 不一致的資料型別:預期 NUMBER 得到 CHAR
我能做些什么來解決這個問題?
uj5u.com熱心網友回復:
這是因為您在第一個“case-when”和“else”部分中擁有不同的型別。
這將回傳一個數字:
THEN NVL(NOMINAL_PREMIUM,PAYABLE_PREMIUM)
而在這里你會得到一個字符:
THEN 'LESS THAN 100K'
解決方案是將數字轉換為字符:
NVL(NOMINAL_PREMIUM,PAYABLE_PREMIUM) -> to_char(NVL(NOMINAL_PREMIUM,PAYABLE_PREMIUM))
所以,這就是我為了擺脫這個錯誤所做的
with test_data(source_system, nominal_premium, payable_premium, product_name_en) as (
select 'a', 1, 2, 'b' from dual
)
SELECT
CASE WHEN SOURCE_SYSTEM <> 'SHIELD'
THEN to_char(NVL(NOMINAL_PREMIUM,PAYABLE_PREMIUM))
WHEN SOURCE_SYSTEM = 'SHIELD' AND upper(PRODUCT_NAME_EN) = 'CANCER' AND TO_NUMBER(NVL(NOMINAL_PREMIUM,PAYABLE_PREMIUM)) <100000
THEN 'LESS THAN 100K'
ELSE 'OTHER' END AS NEW_GROUP
FROM test_data
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/338209.html
上一篇:對于LOOPwithgroupbyinsertintoORA-06550ColumnNOTALLOWEDHERE錯誤
下一篇:在Oracle中連接值和計數行
