合并列值:
在sqlserver2000中可以用函数实现
sqserver 2005
declare @tb table(id int, value varchar(10))
insert into @tb values(1, 'aa')
insert into @tb values(1, 'bb')
insert into @tb values(2, 'aaa')
insert into @tb values(2, 'bbb')
insert into @tb values(2, 'ccc')
-- 查询处理
SELECT * FROM(SELECT DISTINCT id FROM @tb)A OUTER APPLY(
SELECT [values]= STUFF(REPLACE(REPLACE(
(
SELECT value FROM @tb N
WHERE id = A.id
FOR XML AUTO
), '<N value="', ','), '"/>', ''), 1, 1, '')
)N
分析列值
declare @tb table(id int,value varchar(30))
insert into @tb values(1,'aa,bb')
insert into @tb values(2,'aaa,bbb,ccc')
SELECT A.id, B.value
FROM(
SELECT id, [value] = CONVERT(xml,' <root> <v>' + REPLACE([value], ',', ' </v> <v>') + ' </v> </root>') FROM @tb
)A
OUTER APPLY(
SELECT value = N.s.value('.', 'varchar(100)') FROM A.[value].nodes('/root/v') N(s)
)B
在sqlserver2000中可以用函数实现
sqserver 2005
declare @tb table(id int, value varchar(10))
insert into @tb values(1, 'aa')
insert into @tb values(1, 'bb')
insert into @tb values(2, 'aaa')
insert into @tb values(2, 'bbb')
insert into @tb values(2, 'ccc')
-- 查询处理
SELECT * FROM(SELECT DISTINCT id FROM @tb)A OUTER APPLY(
SELECT [values]= STUFF(REPLACE(REPLACE(
(
SELECT value FROM @tb N
WHERE id = A.id
FOR XML AUTO
), '<N value="', ','), '"/>', ''), 1, 1, '')
)N
分析列值
declare @tb table(id int,value varchar(30))
insert into @tb values(1,'aa,bb')
insert into @tb values(2,'aaa,bbb,ccc')
SELECT A.id, B.value
FROM(
SELECT id, [value] = CONVERT(xml,' <root> <v>' + REPLACE([value], ',', ' </v> <v>') + ' </v> </root>') FROM @tb
)A
OUTER APPLY(
SELECT value = N.s.value('.', 'varchar(100)') FROM A.[value].nodes('/root/v') N(s)
)B