4

こんな問い合わせがあります

Select 
     Col_A
    ,Col_B
    ,Col_C
    ,CASE 
        WHEN (SELECT ...{a very complicated query}...) IS NOT NULL THEN 1
        ELSE 0
     END CASE AS Col_D
FROM
    MyTable

Col_D を生成するサブクエリは、null でない場合、整数を返します。

Col_D の BIT を表示する必要がありますが、それが返す INT も表示する必要があります。通常、サブクエリを書き直して Col_E と呼びますが、複雑であるため、2 回実行したくありません。理想的には、次のようになります。

Select
     Col_A
    ,Col_B
    ,Col_C
    ,(SELECT ...{a very complicated query}...) AS Col_E
    ,CASE 
        WHEN Col_E IS NOT NULL THEN 1
        ELSE 0
     END CASE AS Col_D
FROM
    MyTable

オプションはありますか?(MS SQL 2008)

編集:申し訳ありません-複雑なクエリには、列に基づくwhere句が含まれていることに言及する必要がありました

SELECT ...{a very complicated query}... WHERE X = Col_A AND Y = Col_B
4

2 に答える 2

2

Col_E次のように、別ので返されるクエリをネストし、その上にSELECT追加できます。Col_D

SELECT 
     Col_A
    ,Col_B
    ,Col_C
    ,Col_E
    , CASE 
        WHEN Col_E IS NOT NULL THEN 1
        ELSE 0
     END CASE AS Col_D
FROM (
    Select
         Col_A
        ,Col_B
        ,Col_C
        ,(SELECT ...{a very complicated query}...) AS Col_E
    FROM
        MyTable
) X

この方法では、クエリをコピーする必要はありません。その結果は、outer で利用できるからSELECTです。

于 2013-07-11T01:26:23.063 に答える