现在的位置: 首页 > 综合 > 正文

如何用SQL语句把同一列的数据按某个group by语句组合成一行数据

2012年09月23日 ⁄ 综合 ⁄ 共 1251字 ⁄ 字号 评论关闭

    刚才从论坛上面看到一个帖子,我之前也碰到过这一类问题,所以记下来,算学习到新的东西。从回答者给出的不同的代码,也从另一个侧面看到了这个问题的多种思维解决方案。还是有不少东西可以学得到的。

    学习到的内容:stuff函数的应用

问题: 

  有一个用户表(姓名,编号,爱好)
  user(name,id,hobby),
里面的数据有:
  张三 001 篮球
  张三 001 电影
  李四 002 足球
  王五 003 上网
  李四 002 看美女
现在要求写一SQL语句,使查出结果为:
  张三 001 篮球,电影
  李四 002 足球,看美女
  王五 003 上网

 

解决方案:

方案一:

SQL code
IF OBJECT_ID('USER') IS NOT NULL DROP TABLE [USER] GO CREATE TABLE [USER]( NAME VARCHAR(10) ,ID VARCHAR(5) ,HOBBY VARCHAR(10) ) INSERT INTO [USER] SELECT '张三','001','篮球' UNION ALL SELECT '张三','001','电影' UNION ALL SELECT '李四','002','足球' UNION ALL SELECT '王五','003','上网' UNION ALL SELECT '李四','002','看美女' SELECT NAME,ID ,STUFF((SELECT ','+HOBBY FROM [USER] T2 WHERE T2.NAME=T1.NAME FOR XML PATH('')),1,1,'') FROM [USER] T1 GROUP BY NAME,ID /* NAME ID ---------- ----- --------------- 李四 002 足球,看美女 王五 003 上网 张三 001 篮球,电影 */
方案二:
SQL code
--SQL2000 --1. 创建处理函数 create table tb(name varchar(10),ID int,hobby varchar(20)) insert into tb select '张三','001','篮球' union all select '张三','001','电影' union all select '李四','002','足球' union all select '王五','003','上网' union all select '李四','002','看美女' go CREATE FUNCTION dbo.f_str(@id int) RETURNS varchar(8000) AS BEGIN DECLARE @r varchar(8000) SET @r = '' SELECT @r = @r + ',' + hobby FROM tb WHERE id=@id RETURN STUFF(@r, 1, 1, '') END GO -- 调用函数 SELECt name, hobby = dbo.f_str(id) FROM tb GROUP BY name,id drop table tb drop function dbo.f_str /* (所影响的行数为 5 行) name hobby 李四 足球,看美女 王五 上网 张三 篮球,电影 (所影响的行数为 3 行) */

【上篇】
【下篇】

抱歉!评论已关闭.