2016-09-15 179 views
2

如果对某些人来说这很简单,我很抱歉,我仍处于学习的非常早期阶段!在合并相应列值的同时删除一行中的重复列

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

我需要删除用户列中的重复项,并将它们对应的访问名称加入到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 

理想情况下,我会删除蒂姆的重复和显示如下:

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

在此先感谢您提供任何有关此问题的帮助,之前问过!

+0

这是Oracle或MySQL的? (你已经标记了MySQL和PL/SQL - 后者与Oracle相关,这就是为什么我要问) – Boneist

+0

我的不好!它的PL/SQL –

+0

那么,不是MySQL呢? – Boneist

回答

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 
1

这是GROUP_CONCAT一个很好的机会,具体如下:

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

这里测试:http://sqlfiddle.com/#!9/ad6f15/1

+0

这很公平。是的,我错过了第一关的加入 – kbball

+0

谢谢你的信息!不幸的是我得到的错误:ORA-09904:@GROUP_CONCAT:无效的标识符。有任何想法吗? :D –

+0

这是用于mysql的,Listagg函数适用于PL/SQL。感谢您的帮助,感谢! –

0

使用GROUP_CONCAT与分隔符:

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 
+0

如果没有SEPARATOR子句 – kbball

+0

,你会得到相同的结果哦,真的,如果我想用分号分隔值,那么你能告诉我没有SEPARATOR是如何完成的吗?是的,我知道逗号是默认的,但我总是在如此广泛的范围内提供答案,所以学习者也可以在将来使用这些答案而不会混淆。 – Susang

+0

预期结果有逗号: – kbball

相关问题