2017-09-08 113 views
0

就像標題所暗示的,我想實現這樣的選擇子查詢真假

SELECT 

(<sub query>) AS some_result, 

some_other_result = CASE WHEN some_result > 0 THEN (<another super heavy subquery>) ELSE NULL END 

FROM some_table 

,輸出會是這樣的

+-----------------------------------------+ 
+ some_result +  some_other_result + 
+-----------------------------------------+ 
+  0   +   NULL  + 
+-----------------------------------------+ 
+  6.7  +  3.182738998  + 
+-----------------------------------------+ 

我想這樣做,因爲some_result不會經常發生,但是當它發生時會減慢我的查詢速度。

我有一個備份計劃,使用2個查詢將實現相同的事情,但我想盡可能避免這種方法。

感謝

+0

使用派生表(或cte)。 – jarlh

回答

1

您只能在上層使用some_result,而不是在它被賦予相同的。例如:

select 
     a.*, 
     some_other_result = 
          CASE WHEN a.some_result > 0 THEN (<another super heavy 
subquery>) 
          ELSE NULL END 
from 
      (SELECT 
      (<sub query>) AS some_result 
      FROM some_table) a 
+0

'FROM some_table'應該被刪除。 – Serg

+0

@Serg我相信這只是一個來自作者的簡單示例,如果在同一select中還有其他字段(不包括'sub_query',可能需要'some_table') – Hatik

+0

問題意味着返回一個標量值。否則,原始查詢將失敗,但OP說它的工作原理。 – Serg