sql问题 ( 积分: 100 )

  • 主题发起人 主题发起人 cyf4
  • 开始时间 开始时间
C

cyf4

Unregistered / Unconfirmed
GUEST, unregistred user!
用一个表Test
name dw xw
a1 aa aa
a1 aa ab
a1 aa ac
a1 bb ba
a1 bb bb
a1 bb bc
....
结果:
name dwxw
a1 aa aa.ab.ac,bb ba.bb.bc ...
也就是说,以name,dw分组,同dw中zw 以分号连接,不同以逗号分开,最中一个人只用一条记录.
怎么实现呀,我用的是SQL2000数据库,请帮帮忙。
 
我知道要用到 select distinct dw from text 不过,,,不太清楚怎么写的....有一点思路,,再想想.....
 
DECLARE @Str VARCHAR(2000),
@name VARCHAR(50),
@dw VARCHAR(50),
@xw VARCHAR(50)
SET @Str=''
IF EXISTS(SELECT * FROM TEMPDB.DBO.SYSOBJECTS WHERE ID=OBJECT_ID('TEMPDB.DBO.#Result'))
DROP TABLE #Result

SELECT DISTINCT [name],[name] AS dwxw INTO #Result FROM Test ORDER BY [name]
ALTER TABLE #Result
ALTER COLUMN dwxw VARCHAR(2000) NULL

DECLARE name_cursor CURSOR FOR SELECT DISTINCT [name] FROM Test ORDER BY [name]
OPEN name_cursor
FETCH NEXT FROM name_cursor INTO @name
WHILE(@@FETCH_STATUS=0) -- 对name循环
BEGIN
DECLARE temp_cursor CURSOR FOR SELECT DISTINCT dw FROM Test WHERE [name]=@name ORDER BY dw
OPEN temp_cursor
FETCH NEXT FROM temp_cursor INTO @dw
WHILE(@@FETCH_STATUS=0) -- 对DW循环
BEGIN
SET @Str=@Str + ',' + @dw + ' ' -- 不同以逗号分开
DECLARE Test_cursor CURSOR FOR SELECT xw FROM Test WHERE [name]=@name AND dw=@dw ORDER BY xw
OPEN Test_cursor
FETCH NEXT FROM Test_cursor INTO @xw
WHILE(@@FETCH_STATUS=0)
BEGIN
SET @Str = @Str + @xw + '.' -- 同dw中zw 以'.'连接
FETCH NEXT FROM Test_cursor INTO @xw
END
CLOSE Test_cursor
DEALLOCATE Test_cursor
--删除最后一个 '.'号
IF LEN(@Str)>0
SET @Str=SUBSTRING(@Str,1,LEN(@Str)-1)
FETCH NEXT FROM temp_cursor INTO @dw
END
CLOSE temp_cursor
DEALLOCATE temp_cursor
-- 更新结果集(##Result)中[name]=@name的记录
--删除第一个','号
IF LEN(@Str)>0
SET @Str=SUBSTRING(@Str,2,LEN(@Str))
UPDATE #Result SET dwxw=@Str WHERE [name]=@name
FETCH NEXT FROM name_cursor INTO @name
END
CLOSE name_cursor
DEALLOCATE name_cursor

SELECT * FROM #Result

我这个方法效率不是很高,但能实现你要的效果
等有时间,看看还有没有其他方法
 
楼上的没有问题了,除了用函数或者游标,没有其他直接的办法了
 
先谢谢了,如果有更好的办法,希望大家多多帮帮忙
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部