如何根据 select 语句中的值创建附加列?

问题描述 投票:0回答:1

我有一个这样的选择语句:

SELECT 
    ID, NAME, AGE, LOCATION, GPF, ACCNO, 
    CASE
        WHEN .... AS Indicator1, 
    CASE
        WHEN .... AS Indicator2, ....
FROM 
    EMPLOYEES

我有几个

Indicator
列有复杂的 case 语句。

接下来,根据指标,我需要创建更多列。

示例:

;WITH cte AS
(
    SELECT 
        ID, NAME, AGE, LOCATION, GPF, ACCNO, 
        CASE WHEN .... AS Indicator1, 
        CASE WHEN .... AS Indicator2, 
        ....
    FROM 
        EMPLOYEES
)
SELECT
    *, 
    CASE 
        WHEN Indicator1 = 0 AND Indicator2 = 1 
            THEN 'SDM1'.... 
    END AS Class1, 
    CASE 
        WHEN .....
    END
FROM 
    CTE

另一种方法是将第一个 select 填充到临时表中,然后对临时表执行 select 并引用 Indicator 列。

示例:

SELECT 
    ID, NAME, AGE, LOCATION, GPF, ACCNO, 
    CASE WHEN .... END AS Indicator1, 
    CASE WHEN .... END AS Indicator2,
    ....
INTO
    #TMP1
FROM
    EMPLOYEES;

SELECT 
    *, 
    CASE 
        WHEN Indicator1 = 0 AND Indicator2 = 1 
            THEN 'SDM1'.... 
    END AS Class1, 
    CASE WHEN ..... END
FROM 
    #TMP1

有时我需要使用此级别的输出 - 即 Class1,...添加一些新列,这导致第三级。

使用 cte 或临时表运行似乎很耗时。我想知道 SQL 是否允许任何其他方法,我可以尝试从

SELECT
查询引用计算列(如 case 语句)?

sql-server t-sql
1个回答
0
投票
SELECT 
    ID, NAME, AGE, LOCATION, GPF, ACCNO,
    oa1.Indicator1,
    oa1.Indicator2,
    oa2.Class1,
    oa3.lvl3
FROM EMPLOYEES
OUTER APPLY(SELECT
    CASE WHEN .... AS Indicator1, 
    CASE WHEN .... AS Indicator2,
    .... )oa1
OUTER APPLY(SELECT
    CASE WHEN oa1.Indicator1 = 0 AND oa1.Indicator2 = 1 
         THEN 'SDM1'.... AS Class1 )oa2
OUTER APPLY(SELECT
    CASE WHEN oa2.Class1 .... AS lvl3 )oa3

每个

CASE
变成
OUTER APPLY

© www.soinside.com 2019 - 2024. All rights reserved.