记录1列3行的转换 - > 1行3列

时间:2010-06-03 15:17:11

标签: mysql mysqli

首先看下面的查询

SELECT COUNT(id) AS total_record, id, modeller,
  MONTHNAME(completed_date) AS current_month,
  QUARTER(completed_date) AS current_quarter,
  Difficulty,
  YEAR(completed_date) AS current_year
FROM model
WHERE modeller != ''
  AND completed_date BETWEEN '2010-04-01'
  AND '2010-05-31' AND Difficulty != ''
GROUP BY Difficulty,
MONTH(completed_date) ORDER BY
MONTH(completed_date) ASC

我得到的结果是

Modeller  Month  Year  Difficulty

XYZ       Jan    2010  23

XYZ       Jan    2010  14

XYZ       Jan    2010  15

ABC       Feb    2010   5

ABC       Feb    2010  14

ABC       Feb    2010   6

我想要像

这样的结果
Modeller  Month  Year  Difficulty

XYZ       Jan    2010  23, 14, 15

ABC       Feb    2010  5, 14, 6

我的数据库是我正在开发的应用程序的Mysql,所以任何帮助都会非常明显。

谢谢,

3 个答案:

答案 0 :(得分:2)

查看GROUP_CONCAT

答案 1 :(得分:0)

我想你想要GROUP_CONCAT()。我已经简化了你的字段,所以你需要重新添加计算,但是这样的事情应该这样做:

SELECT modeller, month, year, GROUP_CONCAT(DISTINCT Difficulty)
FROM Model
WHERE $conditions
GROUP BY modeller, month, year

答案 2 :(得分:0)

很好,GROUP_CONCAT功能很强大,在这种情况下可能是一个完美的解决方案。

但请注意,在大型系统中,这种操作可以属于应用程序层而不是数据库查询,从而最大限度地提高维护,重用和减少特定RDBMS中的依赖性。

替代(更多工程)等待它使用DAO模式。与http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html

中记载的一样