用于将多行连接成一个单元格的SQL命令?

时间:2011-11-04 14:47:51

标签: mysql sql database oracle relational-database

我有一个用户组分配表,例如:

ID----UserName------Group
01    johnsmith     admin
02    sarahwilles   admin
03    johnsmith     testuser

我想将其显示为:

UserName-------Groups
johnsmith      admin, testuser
sarahwilles    admin

这可以通过SQL吗?

4 个答案:

答案 0 :(得分:2)

这不是标准SQL的一部分,因为它是如此开放式,以一种提供可预测答案的方式解决这个难题。无限数量的行基本上是正常的,并且是SQL的预期部分,但是无限长度的文本字符串不是。 group_concat()存在于mysql中,但对我而言,它通常是我的要求。它唯一能做的就是截断结果,如果它超过了系统限制group_concat_max_len。因此,它仍然需要额外的代码来计算“真实”结果的长度,并查看它是否比group_concat_max_len长。当然,您可能还有一些其他约束条件可以保证它不会成为问题,但更可能的是,它只是不可能,而不是不可能因超出group_concat_max_len而出现问题。此外,这意味着您必须在某个时刻验证代码中group_concat_max_len的值,因为它是可配置的,并且可能会在以后更改。

在几乎我所希望的每一种情况下我都可以使用group_concat(),我最终发现我最好写一些可以处理行中所有值而不是将它们连接成一个字符串的东西。不过,如果你只是搞乱了mysql>它可能非常方便。提示,探索你的数据。

答案 1 :(得分:1)

不在标准SQL中,但MySQL **提供了GROUP_CONCAT,它可以完全按照您的意愿执行。

SELECT foo, GROUP_CONCAT(DISTINCT bar ORDER BY bar) AS bars
FROM foo_table
LEFT JOIN bar_table ON bar_table.foo_id = foo_table.foo_id

**假设没问题,因为您已使用mysql

标记了问题

答案 2 :(得分:0)

SELECT DISTINCT username,Group FROM table_name

答案 3 :(得分:0)

试试这个:

SELECT UserName, group_concat(group) allGroup
FROM tableAssignment
GROUP BY UserName

希望它有所帮助。