簡體   English   中英

計算列上的 Oracle sql 案例

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

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