我们要求使用逗号运算符附加三个表的varchar列。我们还需要在追加期间忽略NULL或空值。假设表结构如下
declare @t table (col1 varchar(10),col2 varchar(10),col3 varchar(10))
insert into @t
select 'test1','test2','test3' union all
select 'test4',null,'test5' union all
select null,null,'test6' union all
select '','test7',''
预期结果必须如下
Result
--------------------------------
test1,test2,test3
test4,test5
test6
test7
我尝试过使用case语句,但查询变得非常复杂。顺便说一下,我们正在使用SQL Server 2005.寻找任何简单易用的解决方案。提前谢谢。
答案 0 :(得分:2)
不太优雅;
;with T(string) as (
select
isnull(case col1 when '' then null else col1 + ',' end, '')
+ isnull(case col2 when '' then null else col2 + ',' end, '')
+ isnull(case col3 when '' then null else col3 + ',' end, '')
from @t
)
select left(string, abs(len(string) - 1)) from T
答案 1 :(得分:2)
这是一种非常替代的方式
select reverse(stuff(reverse(coalesce(replace(col1, col1, col1 + ','), '')+
coalesce(replace(col2, col2, col2 + ','), '')+
coalesce(replace(col3, col3, col3 + ','), '')), 1,1,'')) Result from @t
答案 2 :(得分:1)
基本上,如果该列不为null / empty,只需在每个列中附加一个逗号。然后,删除结果的最后一个逗号。
SELECT
CASE
WHEN RIGHT(T.outColumn, 1) = ',' THEN SUBSTRING(T.outColumn, 1, LEN(T.outColumn) - 1)
ELSE T.outColumn
END
FROM
(
SELECT
ISNULL(col1, '') + CASE WHEN ISNULL(col1, '') <> '' THEN ',' ELSE '' END +
ISNULL(col2, '') + CASE WHEN ISNULL(col2, '') <> '' THEN ',' ELSE '' END +
ISNULL(col3, '') AS outColumn
FROM
@t
) AS T