案例陈述表现(是否可以从另一个案例陈述中引用另一个案例陈述?)

时间:2012-08-14 20:45:45

标签: sql tsql subquery case

我对子查询和案例陈述有疑问

我在同一个查询中有两个案例陈述:

  • 其中一个子查询用于确定列是否匹配。
  • 我希望对方检查是否匹配[以及其他检查],然后标记一个值。
  • 但是,t-SQL不允许我在我的第二个案例陈述中引用我的第一个字段(从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"

2 个答案:

答案 0 :(得分:0)

您是否尝试过以下方面的内容:

select case Bar1 ... end as Bar2, ...
  from ( select case Foo1 ... end as Bar1, ... from ... )

可以根据需要JOIN使用其他表格。

答案 1 :(得分:0)

您应该考虑发布完整查询,但是如果要在另一个CASE语句中引用第一个CASE的结果,那么您可以将其包装在类似于SELECT的{​​{1}}中这样:

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