我想通过使用特定列进行分组,但同时我需要连接

i want to group by using particular column but same time i need to concatenate

示例如下:

Table A

project Name amount  detail    department    supervisor
 1234  angel  200     water      utility      you
 234     B     200     house      retail       me
 235     C     400      air      environment   where
 1234  angel  200     water     department     son
 234     B     200     house      retail       me
 235     C     400     treat      environment   where
 1234  angel  200     water      utility      you
 234     B     200     house      retail       me
 235     C     400      air      environment   where

SQL 的输出应该是 -

project   Name   amount   detail    department     supervisor
1234     angel    200      water       utility      you,son
234        B      200       house       retail       me
235        C      400      air,treat   environment    where

删除重复的类型也像..

好吧,我尝试使用 LISTAgg,但问题是我需要按项目对其进行分组,并且不想将其分组到我的详细信息和详细信息列中,但我需要一个不同的值来详细传递,主管列希望一些有人可以帮忙

这是一个痛苦的问题,因为你需要消除重复项。 listagg() 不支持 distinct.

因此,每个子查询都需要多个子查询:

select a.project, a.name, a.amount, a.department, ad.details, asu.supervisors
from a join
     (select project, listagg(detail, ',') within group (order by project) as details
      from (select distinct project, name, amount, department, detail
            from a
           ) a
      group by project
     ) ad
     on ad.project = a.project join
     (select project, listagg(supervisor, ',') within group (order by project) as supervisors
      from (select distinct project, name, amount, department, supervisor
            from a
           ) a
      group by project
     ) asu
     on asu.project = a.project   
group by project, name, amount, department;

您可以加​​入三个嵌套子查询并使用 distinctunique 摆脱 duplicates :

select distinct * from
(
 select dt.project, dt.Name, dt.amount, details, departments, supervisors 
   from
 (select project, Name, amount, listagg(detail, ',') within group (order by detail) details
   from ( select unique project, Name, amount, detail from a )
  group by project, Name, amount) dt
inner join
 (select project, Name, amount, listagg(department, ',') within group (order by department) departments
    from ( select unique project, Name, amount, department from a )
   group by project, Name, amount) dp on (dt.project=dp.project)
inner join
  (select project, Name, amount, listagg(supervisor, ',') within group (order by supervisor desc) supervisors
     from ( select unique project, Name, amount, supervisor from a )
    group by project, Name, amount) sp on (dt.project=sp.project)
)
order by lower(name);

Demo