有一个用户表(姓名,编号,爱好)
user(name,id,hobby),
里面的数据有:
张三 001 篮球
张三 001 电影
李四 002 足球
王五 003 上网
李四 002 看美女
现在要求写一SQL语句,使查出结果为:
张三 001 篮球,电影
李四 002 足球,看美女
王五 003 上网
也就是要把一个人的爱好组合一下,搞了一天也没搞定,那位达人会,望指点一下啊
user(name,id,hobby),
里面的数据有:
张三 001 篮球
张三 001 电影
李四 002 足球
王五 003 上网
李四 002 看美女
现在要求写一SQL语句,使查出结果为:
张三 001 篮球,电影
李四 002 足球,看美女
王五 003 上网
也就是要把一个人的爱好组合一下,搞了一天也没搞定,那位达人会,望指点一下啊
http://topic.csdn.net/u/20100326/15/d6d4614b-15fb-4275-bc2d-4b6ecacaecea.html
if object_id('tempdb.dbo.#user') is not null drop table #user
create table #user([name] varchar(4),[id] varchar(3),[hobby] varchar(6))
insert #user
select '张三','001','篮球' union all
select '张三','001','电影' union all
select '李四','002','足球' union all
select '王五','003','上网' union all
select '李四','002','看美女'select name,id,
[hobby]=stuff((
select ','+convert(varchar(20),[hobby]) from #user where t.id=id for XML path(''))
,1,1,'')
from #user t
group by name,id
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 篮球,电影
*/
insert into [user] select '张三','001','篮球'
insert into [user] select '张三','001','电影'
insert into [user] select '李四','002','足球'
insert into [user] select '王五','003','上网'
insert into [user] select '李四','002','看美女'
go
select name,stuff((select ','+hobby from [user] where name=a.name for xml path('')),1,1,'') from [user] a group by name
go
drop table [user]
/*
name
---------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
李四 足球,看美女
王五 上网
张三 篮球,电影(3 行受影响)
*/
--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','看美女'goCREATE 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,iddrop table tb
drop function dbo.f_str
/*(所影响的行数为 5 行)name hobby
李四 足球,看美女
王五 上网
张三 篮球,电影(所影响的行数为 3 行)*/
create table #tb(name varchar(20),id varchar(20),hobdy varchar(20))insert into #tb values('张三','001','篮球')
insert into #tb values('张三','001','电影')
insert into #tb values('李四','002','足球')
insert into #tb values('王五','003','上网')
insert into #tb values('李四','002','看美女')Select tb1.[Name],tb1.id,(Select ''+hobdy from #tb as tb2 where tb2.id=tb1.id for xml Path(''))
From #tb tb1 group by tb1.id,tb1.[name]