Sql 如何对查询结果进行分组和连接

Sql 如何对查询结果进行分组和连接,sql,Sql,假设我有这样一个问题: Select dept, person_id form depts 返回以下结果 dept person_id ----- --------- 'sales' 2 'management' 2 'sales' 3 'administrative' 4 'management' 4 如何进行返回以下结

假设我有这样一个问题:

Select 
    dept, 
    person_id
form 
    depts
返回以下结果

dept              person_id
-----             ---------
'sales'              2
'management'         2
'sales'              3
'administrative'     4
'management'         4
如何进行返回以下结果的查询

 depts                         person_id
 -----                         ---------
'sales, management'             2
'sales'                         3
'administrative, management'    4

不适用于
PostgreSql
,但适用于
Ms Sql Server

select person_id,
       (select stuff((select ', ' + dept from TableName t2
        where t2.person_id = t1.person_id
        for xml path('')), 1, 2, '')) as depts 
from TableName t1
group by person_id
编辑:

;with cte as(your super big query here)

select person_id,
       (select stuff((select ', ' + dept from cte t2
        where t2.person_id = t1.person_id
        for xml path('')), 1, 2, '')) as depts 
from cte t1
group by person_id
您可以尝试以下方法:

SELECT group_concat(dept),person_id FROM depts group by person_id ;//mysql

您使用的是哪种dbms?mySQL支持组_concat,该组将执行此操作。如果不是MySQL,请在您的RDBMS中寻找等价物实际上我更喜欢inter dbms解决方案,这就是我没有指定的原因。但是对于这个查询,我使用的是Sql Server。但我也希望在PostgreSQL中这样做。ListAgg可能会根据的版本而工作,但我认为,除非您为两者编写类似的UDF,否则您不会在两者之间找到实现这一点的通用功能。很好的文章真的很好的文章谢谢这不是团体讨论吗?我认为concat函数需要2个参数giorgi,我想知道,在这种情况下,什么会执行得更快,是分组还是选择不同的?@JeremyC.,有很多讨论的话题。在许多情况下都是一样的,但除非你检查执行计划,否则没有人能告诉你wich更好。好的,谢谢,我有这个查询,但使用distinct,然后我看到了你的,测试了它,发现它产生了相同的结果:p只是想知道这两种方法是否是最佳实践,但如果基本相同,我就不太深入研究了it@JeremyC.,不幸的是,我认为这正是分组使用的情况。请参阅本文并检查这两个版本的执行计划,以确保:@NelsonTeixeira,是的,您可以使用cte-common表表达式。请为那个编辑。。。