在sql中将不同的行数据合并到一个单元格中[重复]
Posted
技术标签:
【中文标题】在sql中将不同的行数据合并到一个单元格中[重复]【英文标题】:combine different row data into one cell in sql [duplicate] 【发布时间】:2019-04-18 15:50:18 【问题描述】:我有一个具有以下结构的视图:
areas employee_id complaint_type_id
a1 e1 c1
a2 e1 c1
a3 e2 c1
a1 e1 c2
.
现在在代码中,我正在从视图中获取特定员工的 area
和 complaint_type_id
。我想显示分配给不同区域员工的投诉类别。
我得到的输出如下:
area complaint_type_id
a1 c1
a2 c1
a3 c1
a1 c2
a2 c2
a3 c2
在此输出中,每种投诉 id 的区域都在重复。我想在一行中显示特定区域的投诉类别
我想要的输出如下:
area complaint_type_id
a1 c1,c2
a2 c1,c2
a3 c1,c2
我尝试使用group by
子句,但在group by
的输出中,每种投诉类型出现两次。我怎样才能达到我想要的输出?
【问题讨论】:
使用 FOR XML PATH listagg 等效!! 【参考方案1】:将 CTE 用于其他表格,这将起作用:
select distinct t1.area,
STUFF((SELECT distinct ',' + t2.complaint_type_id
from Table1 t2
where t1.area = t2.area
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,0,'') data
from Table1 t1;
检查:http://sqlfiddle.com/#!18/0f121/7
【讨论】:
您的解决方案对我有用,但它正在获取所有类型的投诉类型 ID。我只需要分配给特定员工的那些【参考方案2】:如果您有最新版本的 SQLS 或 SQLAzure:
SELECT
area,
STRING_AGG(complaint_type_id, ',') as complaint_type_id
FROM
table
GROUP BY
area
ps;有趣的文章:https://sqlperformance.com/2014/08/t-sql-queries/sql-server-grouped-concatenation - 内容是“如果您没有最新版本的 SQLS 来拥有 STRING_AGG,请使用 STUFF/FOR XML PATH 或 .NET CLR”
【讨论】:
以上是关于在sql中将不同的行数据合并到一个单元格中[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在Access查询中将多行的文本值组合到一个单元格中[重复]