我有一个数据库表,其数据如下所示:
Primary key | Column1 | Column2 | col3 | col4 |col5
---------------------------------------------------------------------
1 | Chicago Bulls | Michael Jordan | 6'6 | aaaa | cccc
2 | Chicago Bulls | Scottie Pippen | 6'8 | zzzz | 345
3 | Utah Jazz | Malone | 6'9 | vvvv | xcxc
4 | Orlando Magic | Hardaway | 6'7 | xnnn | sdsd
我想编写一个查询,它将获取Column1中的所有不同值,并在Column2中为每个Column1值附加值。 例如:查询应返回
**Chicago Bulls | Michael Jordan, Scottie Pippen**
**Utah Jazz | Malone**
**Orlando Magic | Hardaway**
我可以编写一个查询来获取column1中的所有不同值,然后迭代每个不同的值以在一些操作之后获得附加的列2。是否可以只在一个查询中完成整个作业?请帮助查询示例。 感谢。
答案 0 :(得分:5)
如果您使用的是MySQL
select Column1, group_concat(Column2)
from t
group by Column1
答案 1 :(得分:2)
如果您使用的是SQL Server:
SELECT Column1,
stuff((
SELECT ', ' + Column2
FROM tableName as t1
where t1.Column1 = t2.Column1
FOR XML PATH('')
), 1, 2, '')
FROM tableName as t2
GROUP BY Column1
不确定微软为何如此努力,但据我所知,这是在SQL Server中执行此操作的唯一方法...
在旁注中,您可能会考虑将Column1更改为查找表,或者下次犹他州移动您将会讨厌生活;)
答案 2 :(得分:0)
此类问题的一般解决方案是聚合函数ARRAY_AGG(),它返回一个包含不同行中值的数组,可选择按某些条件排序。已为下一版本的SQL标准提出此功能。 GROUP_CONCAT()函数是一种特殊情况,它将数组转换为逗号分隔的字符串。
最新的HSQLDB 2.0.1支持ARRAY_AGG()和GROUP_CONCAT()。 http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#N12312
答案 3 :(得分:0)
SQL Anywhere具有list() aggregation功能,因为十多年来,正是出于此目的。
如果您使用的是SQL Server,那么除了在某种程度上滥用XML的棘手解决方案外,您还可以使用任何.net语言编写自己的聚合函数。并且Microsoft documentation of this feature完全使用字符串连接的情况作为示例。