将不同的行数据合并到sql中的一个单元格中[重复]

问题描述 投票:2回答:2

这个问题在这里已有答案:

我有一个具有以下结构的视图:

areas    employee_id     complaint_type_id
a1        e1                c1
a2        e1                c1
a3        e2                c1
a1        e1                c2
.

现在在代码中,我从视图中获取特定员工的areacomplaint_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区域的输出中,每种投诉类型出现两次。如何实现我想要的输出?

sql sql-server view
2个回答
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


0
投票

如果您有最新版本的SQL For SQL Azure:

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”

© www.soinside.com 2019 - 2024. All rights reserved.