将列数据合并到字符串中 - sql server

时间:2016-03-19 14:53:17

标签: sql sql-server sql-server-2008 sql-server-2012

我在一个表中有以下数据

enter image description here

我尝试了很多,但仍然没有成功,

我想要实现的是

enter image description here

更新可以有任意数量的ATTCODE,意味着我不知道有多少人可以在那里

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:3)

虽然聚合字符串连接是最常用的方法,但如果每empid只有两个值,则可以这样做:

select empid,
       (min(attcode + ':' + cast(count as varchar(255)) + ' & ' +
        max(attcode + ':' + cast(count as varchar(255))
       ) as str
from t
group by empid;

这不是一般解决方案,但如果您为每个组提供示例两个值,它可能会解决您的问题。

答案 1 :(得分:1)

这适用于任意数量的ATTCode:

;WITH cte AS (
SELECT *
FROM (VALUES
(1, 'CL', 10),
(1, 'SL', 20),
(2, 'CL', 9),
(2, 'SL', 2)) as t(EmpId, ATTCode, [Count])
)

select DISTINCT  c.EmpId,
        REPLACE(STUFF((SELECT ',' + ATTCode +':'+CAST([Count] as nvarchar(5)) 
        FROM cte s
        WHERE s.EmpId = c.EmpId
        FOR XML PATH('')),1,1,''),',',' & ') as [Str]
from cte c

结果:

EmpId       Str
----------- ----------------
1           CL:10 & SL:20
2           CL:9 & SL:2

(2 row(s) affected)