在合并相应的列值时删除一行中的重复列

时间:2016-09-15 15:44:00

标签: oracle plsql merge duplicates

道歉,如果这对某些人来说似乎很简单,我仍处于(非常)早期学习阶段!

基本上我有一个包含多个用户(Users_ID)的表数据库,每个用户都有一个相应的访问名称(NAME)。问题是,一些用户有多个访问名称,这意味着在拉取数据时,User_ID列中存在重复项。

我需要删除User列中的重复项并在NAME列中加入相应的访问名,因此它只占用1行而且没有数据丢失。

我正在使用的当前SQL查询是:

select Table1_user_id, Table2.name,
from Table1
inner join  Table2
on Table1.role_id =  Table2.role_id

这将返回的一个例子:

USER_ID  |  NAME
-------    --------------
Tim        Level_1 Access
John       Level 2 Access
Tim        Level 2 Access
Mark       Level 3 Access
Tim        Level 3 Access

理想情况下,我会删除Tim的重复项并显示如下:

USER_ID  |  NAME
-------    ----------------------------------------------
Tim        Level_1 Access, Level 2 Access, Level 3 Access
John       Level 2 Access
Mark       Level 3 Access

提前感谢您对此提出的任何帮助,如果以前有类似问题的话,也会感到抱歉!

2 个答案:

答案 0 :(得分:0)

将GROUP_CONCAT与SEPARATOR一起使用:

SELECT Table1.user_id, GROUP_CONCAT(Table2.name SEPARATOR ',') AS Ename
FROM Table1
INNER JOIN  Table2 ON Table1.role_id =  Table2.role_id
GROUP BY Table1.user_id

答案 1 :(得分:0)

select Table1_user_id, LISTAGG(Table2.name,', ') WITHIN GROUP (ORDER BY Table2.name) as Name
from Table1
inner join  Table2
on Table1.role_id =  Table2.role_id