注册 登录
编程论坛 SQL Server论坛

请问一个SQL语句的写法,很有难度的

周吴正王 发布于 2007-01-04 11:48, 760 次点击

有这样一个表:
(ID 数字型),(name 字符型) ,(class 字符型 分类字段)
1 张三 武汉
2 李四 武汉
3 刘八 武汉
5 周九 成都
6 蔡十 成都
7 何大 北京
8 刘小 北京

语句运行后的结果应是:
武汉 张三、李四、刘八
成都 刘八、周九
北京 何大、刘小

这样的语句应该怎么写呢

9 回复
#2
棉花糖ONE2007-01-04 15:14

drop table t
create table t(id int identity,name varchar(5),class varchar(4))
insert t select '张三','武汉'
union select '李四','武汉'
union select '刘八','武汉'
union select '周九','成都'
union select '蔡十','成都'
union select '何九','北京'
union select '刘小','北京'

drop function fun_t
create function fun_t(@class varchar(10))
returns varchar(2000)
as
begin
declare @a varchar(2000)
set @a=''
select @a=@a+','+cast(name as varchar) from t where class=@class
set @a=right(@a,len(@a)-1)
return @a
end
select distinct class,dbo.fun_t(class) as 连接 from t

[此贴子已经被作者于2007-1-4 15:19:49编辑过]

#3
周吴正王2007-01-04 19:53

谢谢了,真是帮了大忙了

#4
周吴正王2007-01-04 20:14
上面的语句执行起来很多结果是重复的,有没有更优化的语句
#5
棉花糖ONE2007-01-04 20:37

我运行没重复的啊,你是不是把distinct漏了

#6
周吴正王2007-01-05 16:41
是这样的,如果不带distinct的话是有很多重复语句,distinct只是把相同结果给滤掉了,语句实际执行所花的时间还是有很多花在的重复的结果上
#7
棉花糖ONE2007-01-05 16:45
那我就不会了,优化的东西,我都不懂
#8
周吴正王2007-01-05 17:22
select class,dbo.fun_t(class) as 连接 from t group by class 这样好象执行次数少一些
#9
ninggang2007-01-06 13:39
jinyuzhang在这方面,就是很厉害,哈哈,支持
#10
棉花糖ONE2007-01-06 13:39
都是偷别人的
1