我想通过使用特定列进行分组,但同时我需要连接
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;
您可以加入三个嵌套子查询并使用 distinct
或 unique
摆脱 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);
示例如下:
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;
您可以加入三个嵌套子查询并使用 distinct
或 unique
摆脱 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);