我有一個很長的運算式,它可能會回傳一個正數、負數或零十進制值。我想這樣做:
SELECT CASE WHEN {long expression} < 0 THEN 0 ELSE {long expression} END
但我不想重復冗長的表達。我想要像 ISNULL 這樣的東西,比如
SELECT ISNEGATIVE({long expression}, 0)
但這似乎不是一回事。顯然 GREATER 會起作用,但它是 2017 年。
我很確定我被水洗了,但我希望能有奇跡。任何人?
uj5u.com熱心網友回復:
考慮使用CROSS APPLY. 它們將允許您參考別名和堆疊計算
Select CASE WHEN AVAL < 0 THEN 0 ELSE AVAL END
From YourTable A
Cross Apply ( values (longexpression) )B(AVAL)
uj5u.com熱心網友回復:
只是為了一些品種...
您可以將其往返,FORMAT因為這允許對正值、負值和零進行不同的處理。
SELECT CAST(FORMAT({long expression}, '#.########;\0;0') AS DECIMAL(18,8))
我只是將APPLY自己用作第一個呼叫埠(而不是通過一些完全沒有根據的字串轉換來不必要地呼叫已知的慢速函式)。
uj5u.com熱心網友回復:
CTE 可能很適合這里。就像是:
with cte as (
select *,
longExpression = ?long expression definition here?
from yourTable
)
select ?other stuff?,
CASE WHEN longExpression < 0 THEN 0 ELSE longExpression END
from cte;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/525469.html
