如何根据 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
我有这个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