gpt4 book ai didi

sql - sql中将多列合并为一列

转载 作者:行者123 更新时间:2023-12-04 00:58:36 24 4
gpt4 key购买 nike

我有一个表 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 中执行此操作。这可能吗?

最佳答案

您可以使用动态 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))到列表中的每一列。

关于sql - sql中将多列合并为一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27549700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com