[英]Alias A Subquery Inside CASE
我有一個簡單的INSERT
查詢,其中還包含以下列值之一的代碼。
VALUES( ..... ,
CASE WHEN hand < (SELECT AVG(ss.hand) AS r FROM sales ss WHERE ss.year=:year)
THEN (r - hand)
ELSE 0
END)";
這里的目標是使用THEN
內部的子查詢結果平均值(別名為'r')。 問題是,我收到一條錯誤消息,說在運行查詢時未找到列r。 如果我從THEN中刪除“ r”,則可以正常運行。 我不想將子查詢復制到THEN
因為這會損害性能。
我還嘗試為整個子查詢添加別名,但這導致語法錯誤。
有什么提示嗎? 我是SQL的新手,並且已經為此奮斗了幾個小時。
您將不得不重復該表達式:
(CASE WHEN hand < (SELECT AVG(ss.hand) FROM sales ss WHERE ss.year=:year)
THEN ((SELECT AVG(ss.hand) FROM sales ss WHERE ss.year=:year) - hand)
ELSE 0
END)
您也可以這樣表示:
greatest(0, (SELECT AVG(ss.hand) FROM sales ss WHERE ss.year=:year) - hand) )
另一種選擇是使用select . . . insert
select . . . insert
在from
子句中select . . . insert
並定義此表達式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.