繁体   English   中英

Concat字段值为SQL Server中的字符串

[英]Concat field value to string in SQL Server

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

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

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

我怎么能在SQL Server中执行此操作?

谢谢

实际答案:

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

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

尝试这个:


    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

在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;
 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

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

请参阅此链接以获得更多说明

AFAIK,你需要自己做。

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

尝试这个

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM