连接N个记录某一个字段值的方法
效果如图,从第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 在子选择中都无效。