[英]Oracle sql case over a computed column
我想寫在 oracle sql 中,大小寫超過計算列。 查詢如下。
Select trunc (Cost*100/Amt) as 'Computed_LTV',
Case
When Request_Term <19 THEN '60'
When Request_Term <=24THEN'-18'
When Computed_LTV <70.805 THEN '-20'
ELSE '-60'
END AS "Var_1"
FROM LOAN_APP
它只使用一次,所以我建議你使用相同的公式:
SELECT TRUNC (Cost * 100 / Amt) AS Computed_LTV,
CASE
WHEN Request_Term < 19 THEN '60'
WHEN Request_Term <= 24 THEN '-18'
WHEN TRUNC (Cost * 100 / Amt) < 70.805 THEN '-20' --> here
ELSE '-60'
END AS Var_1
FROM LOAN_APP
如果您堅持使用計算列,則必須使用 CTE 或內聯視圖,但在這種簡單的情況下,這可能有點過分。
另外,去掉 Oracle 中的雙引號。 它們只會引起問題。
為了對幾個計算列求和,請這樣做:對它們求和。 例如:
select trunc(cost * 100 / amt) as var1,
round(amount * price) as var2,
--
-- sum them using the "+" operator
(trunc(cost * 100 / amt) + round(amount * price)) as result
from ...
或者,如果您在 CTE 中計算它們,那么您將
with data as
(select trunc(cost * 100 / amt) as var1,
round(amount * price) as var2
from ...
)
-- now sum them up
select var1 + var2 as result
from data
您不能在SELECT
中重復使用列別名。 但是從 Oracle 12C 開始,您可以使用橫向連接在FROM
子句中定義它:
SELECT x.Computed_LTV,
(Case When Request_Term < 19 THEN '60'
When Request_Term <= 24 THEN'-18'
When Computed_LTV < 70.805 THEN '-20'
ELSE '-60'
END) AS Var_1
FROM LOAN_APP la CROSS JOIN LATERAL
(SELECT TRUNC(Cost*100/Amt) as Computed_LTV FROM DUAL) x;
注意:不要轉義標識符——使用單引號或雙引號。 這只會使查詢變得混亂,使它們更難編寫和閱讀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.