Sql 如果另一个子查询返回true\false,请选择子查询

Sql 如果另一个子查询返回true\false,请选择子查询,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,正如标题所暗示的,我正在努力实现这样的目标 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_res

正如标题所暗示的,我正在努力实现这样的目标

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     +
+-----------------------------------------+
我之所以想这样做,是因为某些_结果并不经常出现,但当它出现时,会减慢我的查询速度

我有一个备份计划,它使用两个查询来实现相同的目标,但如果可能的话,我希望避免使用这种方法

谢谢

您只能在较高级别使用某些结果,而不能在指定位置使用。比如:

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

使用派生表或cte。应从某些表中删除。@Serg我相信这只是作者提供的一个简化示例,如果同一select excluding sub_查询中有其他字段,则可能需要从某些表中删除该问题意味着返回一个标量值。否则原始查询将失败,但OP说它可以工作。@Serg我想你有点误解了我的意思,我的意思是可能需要从某个表中选择其他列以及某个结果。好的,可能是因为内部SELECT中缺少“*”。