我有一个具有以下结构的视图:
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
区域的输出中,每种投诉类型均出现两次。如何获得所需的输出?
答案 0 :(得分: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;
答案 1 :(得分:0)
如果您使用的是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”