簡體   English   中英

別名CASE內的子查詢

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

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