我当它是不是null这样用子查询选择避免多次运行?
Select
Col_A
,Col_B
,Col_C
,CASE
WHEN (SELECT ...{a very complicated query}...) IS NOT NULL THEN 1
ELSE 0
END CASE AS Col_D
FROM
MyTable
产生Col_D的子查询,返回一个整数。
我需要显示Col_D的位,但我也需要显示它返回的INT。通常情况下,我只是重写子查询并将其称为Col_E,但考虑到它的复杂性,我并不想真正运行它两次。理想情况下,我会:
Select
Col_A
,Col_B
,Col_C
,(SELECT ...{a very complicated query}...) AS Col_E
,CASE
WHEN Col_E IS NOT NULL THEN 1
ELSE 0
END CASE AS Col_D
FROM
MyTable
我有任何选择吗? (MS SQL 2008)
编辑: 对不起 - 我应该提到的是,复杂的查询包括基于我列的where子句,即
SELECT ...{a very complicated query}... WHERE X = Col_A AND Y = Col_B
我认为要得到一个答案,你需要提供更多关于什么是一个非常复杂的查询的信息,以及它与查询中其他列的关系。你可以用这些结果创建一个临时表,然后用'JOIN'来代替使用'SELECT'的操作系统,然后在'JOINED'行运行你的'CASE'? –