首页蓝耳朵|小小蓝耳朵广州图书馆外文室英语儿童读物资源介绍网佛教青年之友旧版收集永硕E盘Phonics Short Vowels Game 
连接N个记录某一个字段值的方法
所属栏目:MS SQL 2008  时间:2010-11-05 11:16  作者:狼子

效果如图,从第1个结果集的数据里,得到第2个结果集的数据

SQL2000下可以用游标,也可以用累加,游标的方法不好,累加好,只要写一个自定义函数,设置一个变量,用这个变量自加对应字段的值就可以了

方法:http://www.nnllok.cn/myBlog/archives/2007/3511.html

2008或2005下的方法,是小燕子搜索来的,来自哪里我不知道,用的是for xml,把需要的记录以一行显示完,返回的数据使用replace把xml格式字符替换掉,代码如下:

create table #test_table
(
 idValue int,
 nameValue nvarchar(50)
)

insert into #test_table values(1, 'aaa')
insert into #test_table values(2, 'bbb')
insert into #test_table values(3, 'ccc')
insert into #test_table values(2, 'bbb222')
insert into #test_table values(2, 'bbb333')

select * from #test_table

SELECT * FROM( SELECT DISTINCT  idValue FROM #test_table ) A
outer apply
(
    SELECT nameValue = STUFF(
    REPLACE(
  REPLACE(
   ( SELECT nameValue
    FROM #test_table N
      WHERE idValue = A.idValue FOR XML AUTO
   ),
   '<N nameValue="', ',')
  , '"/>', '')
 , 1, 1, '')
) N

drop table #test_table

我不知道是替换一个较大文本的字符速度快,还是累加一些记录的字段快,从字数限制来说,varchar最大8000,for xml返回的数据带有大量xml格式字符,这些是多余字条,所以真正有效的字符数,比累加的可用字符长度小很多

对我自己,我觉的我更愿意用累加的

在2000下,for xml不可以用于子查询,以下载自2000帮助文件

FOR XML 子句的使用准则
FOR XML 子句只有在 SELECT 语句中及受到以下限制时才有效:

无论在 UPDATE、INSERT 或 DELETE 语句、嵌套 SELECT 语句还是其它语句(SELECT INTO、赋值语句)中,FOR XML 在子选择中都无效。

小楼宝宝的涂鸦花花(Imitater)的博客起名称骨测字皖ICP备06000023号-17