2017-09-08 80 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