0

サブクエリと case ステートメントについて質問があります

同じクエリに 2 つの case ステートメントがあります。

  • 1 つには、列に一致があるかどうかを判断するために使用されるサブクエリがあります。
  • [他のチェックの中で]一致するかどうかをもう一方にチェックしてから、値にタグを付けてもらいたいです。
  • ただし、t-SQL では、2 番目の case ステートメント内で (case ステートメントから生成された) 最初のフィールドを参照できません。
  • これにより、サブクエリを 2 番目の case ステートメントに追加し、最初の case ステートメントを廃止する必要があります。
  • これを行うと、クエリは 13 秒から 2.5 分に短縮されます
  • クエリからサブクエリを完全に削除すると、実行に 8 秒かかります

質問 1: case ステートメントで生成されたフィールドは、同じクエリ内の後続の case ステートメントで参照できますか?

質問 2:分離された case ステートメントにサブクエリがある場合、クエリに 5 秒しかかからないのに、そのサブクエリが 4 ~ 5 個の他のチェックがある case ステートメントにある場合に 2 分長くかかるのはなぜですか?

第 1 のケース ステートメント

CASE WHEN (SELECT xxx.xxx from xxx) THEN 'Y' 
     END AS "Match_Ind",

2 番目のケース ステートメント

CASE WHEN condition 1 = true THEN 'cond1'
    WHEN condition 2 = true THEN 'cond2'
    WHEN Match_Ind = 'Y' THEN 'matched'
    END AS "Match Detail"
4

2 に答える 2

0

完全なクエリを投稿することを検討する必要がありますが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
于 2012-08-14T20:54:48.263 に答える
0

次の行に沿って何かを試しましたか:

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

JOIN必要に応じて他のテーブルと一緒に使用できます。

于 2012-08-14T20:52:45.767 に答える