高手请进!请问这个sql语句如何写?100分跪求!!!

jamex 2004-07-01 11:45:57
有这么一张表:tblClass
字段名及记录值如下:
fldID fldMainClass fldClass
1 A01 B001
2 A01 B002
3 A01 B003
4 A02 B004
5 A02 B005
6 A03 B006
7 A03 B007
8 A03 B008
9 A03 B009
10 A04 B010

我想用一句sql语句实现得到下面这个记录集,不知如何实现?
fldMainClass fldIDs
A01 1,2,3
A02 4,5
A03 6,7,8,9
A04 10

请问大虾,如何做,急啊!!!
...全文
127 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zjcxc 元老 2004-07-01
--测试

--测试数据
create table tblClass(fldID int,fldMainClass varchar(10),fldClass varchar(10))
insert tblClass select 1 ,'A01','B001'
union all select 2 ,'A01','B002'
union all select 3 ,'A01','B003'
union all select 4 ,'A02','B004'
union all select 5 ,'A02','B005'
union all select 6 ,'A03','B006'
union all select 7 ,'A03','B007'
union all select 8 ,'A03','B008'
union all select 9 ,'A03','B009'
union all select 10,'A04','B010'
go

--查询
exec('select a=fldMainClass,b=cast(fldID as varchar),c=cast('''' as varchar(8000)) into #t from tblClass order by fldMainClass declare @a varchar(10),@b varchar(8000) update #t set @b=case @a when a then @b+'',''+b else b end,c=@b,@a=a select fldMainClass=a,fldID=max(c) from #t group by a')
go

--删除测试
drop table tblClass

/*--测试结果

fldMainClass fldID
------------ ------------
A01 1,2,3
A02 4,5
A03 6,7,8,9
A04 10
--*/
回复
zjcxc 元老 2004-07-01
--真的要追求一句的话,就这样写:

exec('select a=fldMainClass,b=cast(fldID as varchar),c=cast('''' as varchar(8000)) into #t from tblClass order by fldMainClass declare @a varchar(10),@b varchar(8000) update #t set @b=case @a when a then @b+'',''+b else b end,c=@b,@a=a select fldMainClass=a,fldID=max(c) from #t group by a')
回复
pbsql 2004-07-01
--创建一个合并的函数:
create function fmerg(@id VARCHAR(20))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+cast(cast(stuff(fldClass,1,1,'') as int) as varchar)
from tblClass where fldMainClass=@id
set @str=right(@str,len(@str)-1)
return(@str)
End
go
--调用自定义函数得到结果
select distinct fldMainClass,dbo.fmerg(fldMainClass) from tblClass
回复
txlicenhe 2004-07-01
一句SQL语句恐怕不行。


--1.创建一个合并的函数
create function fmerg(@fld varchar(3))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+cast(fldID as varchar) from tblClass where fldMainClass=@fld
set @str=right(@str,len(@str)-1)
return(@str)
End
go

--调用自定义函数得到结果
select distinct fldMainClass,dbo.fmerg(fldMainClass) from tblClass
回复
leeboyan 2004-07-01
给你个例子:
要求
-----------------
原表:表1
xm zw
甲 校长
甲 主任
乙 副校长
乙 副主任
乙 办主任
=====================================
查询结果应该是:
xm zw
甲 校长,主任
乙 副校长,副主任,办主任
=====================================
解答:
1.先建立一个合并函数
create function dbo.hb(@id varchar(100))
return varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
set select @str=@str+','+zw from 表1 where xm=@id
set @str=right(@str,2,len(str)-1)
return(@str)
end
2.调用
select xm,dbo.hb(xm) as zw from 表1

-----正式---------
--测试:
create table 表A(xm varchar(10),zw varchar(10))
insert into 表A select '甲','校长'
insert into 表A select '甲','主任'
insert into 表A select '乙','副校长'
insert into 表A select '乙','副主任'
insert into 表A select '乙','办主任'
insert into 表A select '丙','办主任'
insert into 表A select '定','办主任'

go
--1.创建一个合并的函数
create function fmerg(@id varchar(10))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+zw from 表A where xm=@id
set @str=right(@str,len(@str)-1)
return(@str)
End
go

--2.调用自定义函数得到结果
select distinct xm,dbo.fmerg(xm) as zw from 表A
drop table 表A

回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2004-07-01 11:45
社区公告
暂无公告