Sql选择查询帮助

时间:2010-08-26 16:27:55

标签: sql derby

我有一个数据库表,其数据如下所示:

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。是否可以只在一个查询中完成整个作业?请帮助查询示例。 感谢。

4 个答案:

答案 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完全使用字符串连接的情况作为示例。