如何写SQL语句才能实现下面结果
表table1有字段
room zhanghao
0101 001
0101 002
0102 003
0105 006
0105 007
目的结果
room zhanghao(或计算列)
0101 001,002
0102 003
0105 006,007
问题点数:50、回复次数:5Top
1 楼njchf()回复于 2006-03-17 15:04:35 得分 10
一般的sql语句据本人所知很难实现,除非加上一些限制,比如一个房间只能有两个号,这样的话你就可以把一个表按两个处理,left join即可,如果一个房间最多三个号就要做三个表
不过这样不太灵活
还是在程序里来实现吧,一遍循环搞定,灵活+ very muchTop
2 楼TianChong(*︿_︿* ○Ооo○泡泡oо㊣VC高手群:2997669)回复于 2006-03-18 23:34:33 得分 10
很难实现,一句是绝对实现不了的,不过如使用存储过程还是有可能的,但怎么都不如程序处理方便.不建议使用SQL处理.一定效率低下.Top
3 楼xiaolongjy(小龙)回复于 2006-04-25 18:53:14 得分 5
各位大大 把实现过程写出来 也好让小弟们景仰啊Top
4 楼yangshunying()回复于 2006-04-25 20:39:09 得分 5
写个存储过程来实现Top
5 楼renwanly(★★★★)回复于 2006-04-25 21:00:01 得分 20
1.创建函数
CREATE FUNCTION dbo.uf_TEST ()
RETURNS @RTN TABLE (
room varchar(50),
zhanghao varchar(255)) AS
BEGIN
declare @room varchar(50);
declare @zhanghao varchar(255);
declare cur cursor for select distinct room from table1;
open cur;
FETCH NEXT FROM cur INTO @room ;
WHILE @@FETCH_STATUS = 0
BEGIN
set @zhanghao =''
select @zhanghao =@zhanghao +','+zhanghao
from table1 m
where m.room=@room
UPDATE @RTN set zhanghao=case when len(@zhanghao)>0 then right(@zhanghao,len(@zhanghao)-1) end
where room = @room;
FETCH NEXT FROM cur INTO @room ;
END
CLOSE cur;
DEALLOCATE cur;
END
RETURN
END
go
2.通过下面SQL创建Dw
SELECT * FROM uf_TEST()Top




