SQL 在 Select 语句中引用大方程

SQL Reference Large Equation in Select Statement

我在 select 语句中有一个大方程,我需要在 where 语句中引用我认为它正在消耗我的效率,我不想在我需要的时候引用它。

SELECT 'HeaderDetail' AS rowType, ... , [large CASE/WHEN statement] AS Tracking
...
WHERE NOT(@DNC IN([large CASE/WHEN statement]))
AND [large CASE/WHEN statement] IS NOT NULL

我觉得每次调用语句时都需要重新计算值,而且查询已经花费了几秒钟 运行。有没有一种方法可以引用该语句而无需多次 运行 子查询?

在此先感谢您的帮助!

使用子查询

select *
from (
your query with the large case statement goes here
) temp
where theAliasForThatCaseStatment is not null

过滤 outer queryCTE 中的行时会发生什么。

With CTE as 
(
SELECT 'HeaderDetail' AS rowType, ... , [large CASE/WHEN statement] AS Tracking
...
)
select * from CTE
WHERE NOT(@DNC IN(Tracking))
AND Tracking IS NOT NULL

或使用Sub-Select

select * from 
(
SELECT 'HeaderDetail' AS rowType, ... , [large CASE/WHEN statement] AS Tracking
...
) AS A
WHERE NOT(@DNC IN(Tracking))
AND Tracking IS NOT NULL

试一试:

SELECT 'HeaderDetail' AS rowType, ... , x.Tracking
FROM mytable
CROSS APPLY (SELECT [large CASE/WHEN statement]) x(Tracking)
WHERE NOT(@DNC IN(x.Tracking)) AND x.Tracking IS NOT NULL

作为旁注,CASE 是一个表达式,returns 只是一个 单个 值。所以在与 IN 运算符一起使用时要小心。

SQL Fiddle Demo