将字段值连接到 SQL Server 中的字符串

Posted

技术标签:

【中文标题】将字段值连接到 SQL Server 中的字符串【英文标题】:Concat field value to string in SQL Server 【发布时间】:2010-12-09 22:55:18 【问题描述】:

我需要一个与 SQL Server 中的 Oracle WM_CONCAT 类似的函数,它返回一个逗号分隔的列表,其中包含您作为参数传递的任何字段。例如,在 Oracle 中,

select WM_CONCAT(first_name) from employee where state='CA' 

返回“约翰、吉姆、鲍勃”。

如何在 SQL Server 中执行此操作?

谢谢

【问题讨论】:

【参考方案1】:

在 SQL Server 2017 中添加了 STRING_AGG 函数

SELECT t.name as TableName
      ,STRING_AGG(c.name, ';') AS FieldList
  FROM sys.tables t
  JOIN sys.columns c 
    ON t.object_id = c.object_id
  GROUP BY t.name;

【讨论】:

【参考方案2】:
 SELECT Field1, Substring(Field2, 2, LEN(Field2)) AS Field2 FROM
(
    SELECT
        [InnerData].Field1,
        (SELECT  ',' + Field2 FROM @Fields WHERE Field1=[InnerData].Field1 FOR XML PATH('')) AS Field2
        FROM
        (
            SELECT DISTINCT Field1 FROM @Fields
        ) AS [InnerData]
) AS OuterData

我从这个链接得到这个查询

Refer this Link for more Clarification

【讨论】:

【参考方案3】:

试试这个

 select    
    wm_concat(name) 
 from
    employee
 where
    state='CA'
 group by
    state

【讨论】:

这是不正确的。正如 OP 所指出的,它在 SQL Server 中不起作用。如果您有不同的意思,您可能希望删除它或编辑它?【参考方案4】:

试试这个:


    drop table #mike_temp 
go

select * into #mike_temp 
  from (select 'Ken'  as firstname, 'CO' as state
         union all
        select 'Mike' as firstname, 'CO' as state
         union all
        select 'Tom' as firstname , 'WY' as state
       ) a
go

SELECT distinct 
       state
      ,STUFF((SELECT ', ' + b.firstname FROM #mike_temp b where a.state = b.state FOR XML PATH('')),1, 2, '') AS CSVColumn
  from #mike_temp a

【讨论】:

【参考方案5】:

实际答案:

SELECT
   SUBSTRING(buzz, 2, 2000000000)
FROM
    (
    SELECT 
        firstname
    FROM 
        employee
    WHERE
        State = 'CA'
    FOR XML PATH (',')
    ) fizz(buzz)

这里有一个常见问题。一些搜索:

FOR XML PATH

concat rows csv [sql-server]

【讨论】:

值得注意的是,这仅对 SQL Server 2005 及更高版本有效。 OP 没有说明他们使用的是哪个版本的 SQL Server。 您可以用 STUFF 命令替换 SUBSTRING,该命令无需知道字符串长度即可正常运行。 @Chris J:我会说 SQL 2k5 是一个合理的假设,即 SQL 2000 RTM 和 2.5 版本之后的 10 年 2147483647 是你的朋友...记住它。【参考方案6】:

AFAIK,你需要自己做。

您可以构建一个用户定义的函数,该函数使用游标循环 Employee 的记录,其中状态为 CA,并返回其姓名的串联。

【讨论】:

不,根本不需要使用 CURSOR。

以上是关于将字段值连接到 SQL Server 中的字符串的主要内容,如果未能解决你的问题,请参考以下文章

使用pyspark将两个字符串列值连接到整数数组

如何在图表管道后保留Splunk中的表字段?尝试将值连接到'over'参数,但得到'未找到结果'

我无法将 TableViewCell 按钮连接到 TableViewController!如何将 TableViewCell 中的值连接到 TableViewController?

XSLT:如何将值连接到全局变量

defaultdict(list) 将所有值连接到一个列表中

如何将多个列值连接到 Pandas 数据框中的单个列中