用SQL如何进行如下表格的归并? ( 积分: 100 )

  • 主题发起人 主题发起人 webease
  • 开始时间 开始时间
W

webease

Unregistered / Unconfirmed
GUEST, unregistred user!
例如有如下数据库:
课程编号,班号
1001 ,A
1002 ,B
1003 ,A
1001 ,B
1001 ,C
1002 ,A
如何得到形如
1001, A,B,C
1002, B,A
1003, A
 
在數據庫裡寫一個函數就行了,
select 課程編號,dbo.Fetch_banhao(課程編號) as 班號 from Table group by 課程編號 order by 課程編號

函數:
CREATE FUNCTION Fetch_banhao(@Str Varchar(20))
RETURNS Varchar(100) AS
BEGIN
declare
@banhao Varchar(100),
@BhStr Varchar(4)
set @banhao=''
Declare Lsb cursor for select 班號 from Table where 課程編號=@Str group by 班號 order by 班號
Open Lsb
fetch Lsb into @BhStr
while @@fetch_Status=0
begin
if @banhao=''
set @banhao=@BhStr
else
set @banhao=@banhao+','+@BhStr
fetch Lsb into @BhStr
end
close Lsb
deallocate Lsb
Return @banhao
end
 
同意樓上,不過,這樣的話可能結果集中有的會很長
 
除了游标好象没别的方法了,不过数据一多就慢了
 
班号 是有限的吗?固定多不?

一种比较无奈的垃圾语句:

select a.课程,( (isnull(b.班号,b.班号+',','') +isnull(c.班号,c.班号+',','')+isnull(d.班号,d.班号+',','')) as 班号
from (select 课程 from table1 group by 课程 order by 课程)a
left join
(select 课程,班号 from table where 班号=a)b on a.课程=b.课程
left join
(select 课程,班号 from table where 班号=b)c on a.课程=c.课程
left join
(select 课程,班号 from table where 班号=c)d on a.课程=d.课程

有多少个班号就加多少个left join,很麻烦。
 
散分,感谢smz5369
 
同意smz5369 的写法,不错!
 
樓主好像忘記結帳了~~呵呵
~_~ ~_~
 
后退
顶部