如何根据 SELECT 中的其他列构造新列

How to construct a new column based on other columns in a SELECT

我有这个table:

Assets
--------------------------------
Description VARCHAR(50) NOT NULL
Suffix1 VARCHAR(50) NOT NULL
UseSuffix1 BIT NOT NULL
Suffix2 VARCHAR(50) NULL
UseSuffix2 BIT NOT NULL
Suffix3 VARCHAR(50) NULL
UseSuffix3 BIT NOT NULL

我正在尝试执行构造以下内容的 SELECT 语句:由 Description 字段组成的 VARCHAR(MAX) 列,以及在需要时附加的其他后缀(通过 UseSuffixX旗帜)

输入输出示例:

'MyDesc'
'Suffix1'
0
NULL                 ->     'MyDesc'
0
NULL
0
-----------------------
'MyDesc'
'Suffix1'
1
NULL                 ->     'MyDesc - Suffix1'
0
NULL
0
-----------------------
'MyDesc'
'Suffix1'
0
'Suffix2'            ->     'MyDesc - Suffix2 - Suffix 3'
1
'Suffix3'
1
-----------------------
'MyDesc'
'Suffix1'
1
'Suffix2'            ->     'MyDesc - Suffix1 - Suffix 3'
0
'Suffix3'
1

我开始在 SELECT 中使用 CASE 指令,如下所示:

SELECT
    [Description] + 
    CASE 
        WHEN UseSuffix1 = 1 THEN ' - ' + Suffix1
        WHEN UseSuffix2 = 1 THEN ' - ' + Suffix2
        WHEN UseSuffix3 = 1 THEN ' - ' + Suffix3
        ELSE ''
    END
FROM Assets

但很快意识到我需要在每个 WHEN 分支中扩展所有可能性的树...不确定我在这里是否正确表达自己。

更实用的方法是什么?

您不需要所有的可能性,每个后缀只需要一个 case

SELECT ([Description] + 
        (CASE WHEN UseSuffix1 = 1 THEN ' - ' + Suffix1 ELSE '' END) +
        (CASE WHEN UseSuffix2 = 1 THEN ' - ' + Suffix2 ELSE '' END) +
        (CASE WHEN UseSuffix3 = 1 THEN ' - ' + Suffix3 ELSE '' END) 
       )
FROM Assets