Possible Duplicate:
mysql pivot/crosstab query
我正在使用 MySQL 和 PHP,我从 JOIN 查询中得到了这个表......
╔═══════╦════════════════╦═══════════════╦════════╗
║ name ║ last_name ║ course_name ║ tries ║
╠═══════╬════════════════╬═══════════════╬════════╣
║ coco ║ valencia ║ Course Num. 1 ║ 11 ║
║ coco ║ valencia ║ Course Num. 2 ║ 10 ║
║ coco ║ valencia ║ Course Num. 3 ║ 4 ║
║ coco ║ valencia ║ Course Num. 4 ║ 5 ║
║ John ║ Smith ║ Course Num. 1 ║ 7 ║
║ John ║ Smith ║ Course Num. 2 ║ 6 ║
╚═══════╩════════════════╩═══════════════╩════════╝
我希望我的表格结果是这样的......
╔═══════╦═══════════╦══════════════╦═══════════════╦═══════════════╗
║ name ║ last_name ║ Course Num.1 ║ Course Num. 2 ║ Course Num. 3 ║
╠═══════╬═══════════╬══════════════╬═══════════════╬═══════════════╣
║ coco ║ valencia ║ 11 ║ 10 ║ 4 ║
║ John ║ Smith ║ 7 ║ 6 ║ ║
╚═══════╩═══════════╩══════════════╩═══════════════╩═══════════════╝
我一直在寻找,但找不到方法。该解决方案可以采用 PHP 或 MySQL 或两者。
最佳答案
SELECT name, last_Name,
MAX(CASE WHEN course_name = 'Course Num. 1' THEN tries ELSE NULL END) `Course Num. 1`,
MAX(CASE WHEN course_name = 'Course Num. 2' THEN tries ELSE NULL END) `Course Num. 2`,
MAX(CASE WHEN course_name = 'Course Num. 3' THEN tries ELSE NULL END) `Course Num. 3`
FROM tableName
GROUP BY name, last_Name
如果您的Course_Name
数量未知,PreparedStatement就是您所需要的,
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(CASE WHEN course_name = ''',
course_name,
''' then tries ELSE NULL end) AS ''',
course_name, ''''
)
) INTO @sql
FROM tableName;
SET @sql = CONCAT('SELECT name, last_Name, ', @sql, '
FROM tableName
GROUP BY name, last_Name');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
关于php - MySQL 和 PHP 中的多行合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13576176/