我有一个关于子查询和案例陈述的问题
我在同一查询中有两个案例语句:
- 一个具有用于确定列是否匹配的子查询。
- 我希望另一个检查是否有匹配[在其他检查中],然后标记一个值。
- 但是,t-SQL 不允许我在第二个 case 语句中引用我的第一个字段(从 case 语句生成)。
- 这迫使我将子查询添加到我的第二个 case 语句中并取消第一个 case 语句
- 当我这样做时,我的查询从 13 秒变为 2.5 分钟
- 当我从查询中完全删除子查询时,运行需要 8 秒
问题 1:是否可以在同一查询的后续案例语句中引用案例语句生成的字段?
问题 2:当我将子查询放在独立的 case 语句中时,为什么我的查询只多花 5 秒,而当该子查询位于具有 4-5 个其他检查的 case 语句中时,我的查询时间长 2 分钟?
第一个案例陈述
CASE WHEN (SELECT xxx.xxx from xxx) THEN 'Y'
END AS "Match_Ind",
第二个案例陈述
CASE WHEN condition 1 = true THEN 'cond1'
WHEN condition 2 = true THEN 'cond2'
WHEN Match_Ind = 'Y' THEN 'matched'
END AS "Match Detail"
您应该考虑发布完整的查询,但如果要在另一个 CASE
语句中引用第一个CASE
的结果,则可以将其包装在类似于以下内容的SELECT
中:
select
CASE
WHEN condition 1 = true THEN 'cond1'
WHEN condition 2 = true THEN 'cond2'
WHEN Match_Ind = 'Y' THEN 'matched'
END AS Match Detail
from
(
SELECT CASE
WHEN conditionHere -- (SELECT xxx.xxx from xxx)
THEN 'Y'
END AS Match_Ind,
othercols
from yourtable
) x
您是否尝试过以下内容:
select case Bar1 ... end as Bar2, ...
from ( select case Foo1 ... end as Bar1, ... from ... )
可以根据需要将其与其他表JOIN
。