如何组合多列添加'-'并删除'-'值为NULL
How to combine mulitple column adding '-' and removing '-' with value is NULL
这是我的数据
col1 col2 col col3 col4 col5 col6
42 A 11 18 89 16 empty
42 B 12 empty 89 14 C
36 8 9 empty empty 2 empty
这是我的脚本 运行
select col1 + COALESCE ([col2]+'-','')
+COALESCE([col3]+'-','')+COALESCE([col4]+'-','')
+COALESCE([col5]+'-','')+COALESCE([col6],'') as totalCol
FROM ...
这就是我得到的
totalCol
42A-11-18-89-16-
42B-12- -89-14-C
368-9- - -2 -
这就是我想要的
totalCol
42A-11-18-89-16
42B-12-89-14-C
368-9-2
运行 在您的脚本后将“-”替换为“”
您还必须记住,空值和空白 space 是两种不同的东西。
更新脚本
select ltrim(rtrim(replace(replace(
col1 + COALESCE ([col2]+'-','')
+COALESCE([col3]+'-','')+COALESCE([col4]+'-','')
+COALESCE([col5]+'-','')+COALESCE([col6],'') + ' ','--','-'),
'- ','')))
as totalCol
FROM ...
或假设只有空白 space 而不是空值
select ltrim(rtrim(replace(
[col1] + [col2]+'-' + [col3]+'-' + [col4]+'-' + [col5]+'-' + [col6] + ' '
'- ','')))
as totalCol
FROM ...
假设您已经设计了数据来说明问题(因为您的数据中有 col
,但不在查询中使用 col
),您可以轻松地这样做.在所有非空数据之后添加破折号 (-
)。然后,我们提取除最后一个字符以外的所有字符(因为它始终是破折号)。
我还添加了更多代码来创建数据,这样您就可以 copy/run 整个查询并查看它是否有效。
declare @tbl table (
col1 varchar(10) null,
col2 varchar(10) null,
col3 varchar(10) null,
col4 varchar(10) null,
col5 varchar(10) null,
col6 varchar(10) null,
col7 varchar(10) null
)
insert into @tbl values
('42', 'A', '11', '18', '89', '16', null),
('42', 'B', '12', null, '89', '14', 'C'),
('36', '8', '9', null, null, '2', null)
select left(x.concat_val, len(x.concat_val) - 1) as totalCol
from (
select isnull(col1 + '-', '') +
isnull(col2 + '-', '') +
isnull(col3 + '-', '') +
isnull(col4 + '-', '') +
isnull(col5 + '-', '') +
isnull(col6 + '-', '') +
isnull(col7 + '-', '') as concat_val
from @tbl
) as x
返回数据如下:
totalCol
-----------------------------------------------------------------------------
42-A-11-18-89-16
42-B-12-89-14-C
36-8-9-2
这是我的数据
col1 col2 col col3 col4 col5 col6
42 A 11 18 89 16 empty
42 B 12 empty 89 14 C
36 8 9 empty empty 2 empty
这是我的脚本 运行
select col1 + COALESCE ([col2]+'-','')
+COALESCE([col3]+'-','')+COALESCE([col4]+'-','')
+COALESCE([col5]+'-','')+COALESCE([col6],'') as totalCol
FROM ...
这就是我得到的
totalCol
42A-11-18-89-16-
42B-12- -89-14-C
368-9- - -2 -
这就是我想要的
totalCol
42A-11-18-89-16
42B-12-89-14-C
368-9-2
运行 在您的脚本后将“-”替换为“”
您还必须记住,空值和空白 space 是两种不同的东西。
更新脚本
select ltrim(rtrim(replace(replace(
col1 + COALESCE ([col2]+'-','')
+COALESCE([col3]+'-','')+COALESCE([col4]+'-','')
+COALESCE([col5]+'-','')+COALESCE([col6],'') + ' ','--','-'),
'- ','')))
as totalCol
FROM ...
或假设只有空白 space 而不是空值
select ltrim(rtrim(replace(
[col1] + [col2]+'-' + [col3]+'-' + [col4]+'-' + [col5]+'-' + [col6] + ' '
'- ','')))
as totalCol
FROM ...
假设您已经设计了数据来说明问题(因为您的数据中有 col
,但不在查询中使用 col
),您可以轻松地这样做.在所有非空数据之后添加破折号 (-
)。然后,我们提取除最后一个字符以外的所有字符(因为它始终是破折号)。
我还添加了更多代码来创建数据,这样您就可以 copy/run 整个查询并查看它是否有效。
declare @tbl table (
col1 varchar(10) null,
col2 varchar(10) null,
col3 varchar(10) null,
col4 varchar(10) null,
col5 varchar(10) null,
col6 varchar(10) null,
col7 varchar(10) null
)
insert into @tbl values
('42', 'A', '11', '18', '89', '16', null),
('42', 'B', '12', null, '89', '14', 'C'),
('36', '8', '9', null, null, '2', null)
select left(x.concat_val, len(x.concat_val) - 1) as totalCol
from (
select isnull(col1 + '-', '') +
isnull(col2 + '-', '') +
isnull(col3 + '-', '') +
isnull(col4 + '-', '') +
isnull(col5 + '-', '') +
isnull(col6 + '-', '') +
isnull(col7 + '-', '') as concat_val
from @tbl
) as x
返回数据如下:
totalCol
-----------------------------------------------------------------------------
42-A-11-18-89-16
42-B-12-89-14-C
36-8-9-2