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 query
或 CTE
中的行时会发生什么。
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
运算符一起使用时要小心。
我在 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 query
或 CTE
中的行时会发生什么。
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
运算符一起使用时要小心。