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 的子查询在它不为空时返回一个整数。

我需要显示 Col_D 的 BIT,但我还需要显示它返回的 INT。通常,我会重写子查询并将其命名为 Col_E,但考虑到它的复杂性,我真的不想运行它两次。理想情况下,我会:

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

我有什么选择吗?(微软 SQL 2008)

编辑:对不起 - 我应该提到复杂的查询包括基于我的列的 where 子句,即

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

2 回答 2

3

因此,如果您的查询结果只有一个值或空值,您可以使用:

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

请务必小心,因为如果有潜在的多重回报,这可能会导致笛卡尔积。如果有可以加入的字段,那可能是一种更好的方法(并且由于您正在检查 NULL,因此您可能需要 OUTER JOIN)。

于 2013-07-11T01:25:23.137 回答
2

您可以将返回的查询嵌套Col_E在 anotherSELECT中,并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

这样您就不需要复制查询,因为它的结果将可用于外部SELECT.

于 2013-07-11T01:26:23.063 回答