在SQL中将多列合并为一列

古老的

我有一张桌子Employee,上面有几个字段FirstName,LastName,Email,.......所以我想做的是,在我的情况下,列的选择是动态的

Declare @columnNeeded nvarchar(max)

例子一

Set @columnNeeded = 'FirstName,Email'
Select @columnNeeded from Employee 

例子二

Set @columnNeeded = 'FirstName,LastName'
Select @columnNeeded from Employee

这非常简单,现在我想要的是无论结果集将位于哪一列,我都需要在一列中选择所有列作为逗号分隔的字符串。我在mysql中看到了Group_Concat(),但是不知道如何在sql中执行此操作,那么这可能吗?

戈登·利诺夫(Gordon Linoff)

您可以使用动态SQL执行此操作:

declare @sql nvarchar(max) = 'select @columns from Employee';
declare @columnNeeded nvarchar(max) = 'FirstName,Email';

set @sql = replace(@sql, '@columns', @columnNeeded);

exec sp_executesql @sql;

编辑:

如果希望将它们作为一列,则可以执行以下操作:

declare @sql nvarchar(max) = 'select @columns from Employee';
declare @columnNeeded nvarchar(max) = 'FirstName,Email';

set @sql = replace(replace(@sql, '@columns', @columnNeeded), ',', '+'',''+');

exec sp_executesql @sql;

为了确保类型安全,您可以强制转换列值:

declare @tmp nvarchar(4000) = 'cast(' +
                              replace(@columnNeeded, ',', ', nvarchar(4000)), cast(') +
                              ', nvarchar(4000))'
set @sql = replace(replace(@sql, '@columns', @columnNeeded), ',', '+'',''+');

如果这按预期工作,则将其添加cast(<col> as nvarchar(4000))到列表中的每个列中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章