数据库把n行查询为1行
一、创建示例表
CREATE TABLE TestTable (
name VARCHAR(10),
skill VARCHAR(10)
);
INSERT INTO TestTable VALUES ('张三', 'php');
INSERT INTO TestTable VALUES ('张三', 'java');
INSERT INTO TestTable VALUES ('张三', 'c#');
INSERT INTO TestTable VALUES ('李四', 'c');
INSERT INTO TestTable VALUES ('李四', 'c++');
表结构为:
| name | skill |
| 张三 | php |
| 张三 | java |
| 张三 | c# |
| 李四 | c |
| 李四 | c++ |
希望查询的结果:
| name | allSkill |
| 张三 | php,java,c# |
| 李四 | c,c++ |
二、SQL Server中实现
-- SQL Server
SELECT name,STUFF(
(
SELECT ',' + skill
FROM testtable a
WHERE a.name = b.name
FOR XML PATH('')
),
1, 1, '') AS allSkill
FROM testtable b
GROUP BY name
三、MySQL中实现
-- MySQL SELECT name,GROUP_CONCAT(skill) AS allSkill FROM testtable GROUP BY name;
四、Oracle中实现
-- Oracle SELECT name,WMSYS.WM_CONCAT(skill) AS allSkill FROM testtable GROUP BY name;

浙公网安备 33010602011771号