sql server 2000 中 可以用函数,分组,实现字段列的聚合.
sql server 2005 一般采用邹建提供的一个合并字段技巧来处理.
如下:
if
exists
(
select
1
from
sys.objects
where
object_id
=
object_id
(
'
表1
'
))
begin
drop table 表1
end
create table 表1(编号 varchar ( 10 ),wt1 varchar ( 10 ),wt2 varchar ( 10 ))
insert into 表1
select ' 001 ' , ' aaa ' , ' cccc '
union all select ' 001 ' , ' bbb ' , ' ffff '
union all select ' 001 ' , ' ccc ' , ' eeee '
union all select ' 002 ' , ' ssss ' , ' yyyyy '
go
SELECT *
FROM (
SELECT DISTINCT
编号
FROM 表1
)A
OUTER APPLY(
SELECT
[ values ] = STUFF ( REPLACE ( REPLACE (
(
SELECT wt1 FROM 表1 N
WHERE 编号 = A.编号
FOR XML AUTO
), ' <N wt1=" ' , ' , ' ), ' "/> ' , '' ), 1 , 1 , '' )
)N
OUTER APPLY(
SELECT
[ values ] = STUFF ( REPLACE ( REPLACE (
(
SELECT wt2 FROM 表1 Na
WHERE 编号 = A.编号
FOR XML AUTO
), ' <Na wt2=" ' , ' , ' ), ' "/> ' , '' ), 1 , 1 , '' )
)Na
drop table 表1
-- 结果
/**/ /*
编号 values values
----------- --------------- -------------------
001 aaa,bbb,ccc cccc,ffff,eeee
002 ssss yyyyy
*/
begin
drop table 表1
end
create table 表1(编号 varchar ( 10 ),wt1 varchar ( 10 ),wt2 varchar ( 10 ))
insert into 表1
select ' 001 ' , ' aaa ' , ' cccc '
union all select ' 001 ' , ' bbb ' , ' ffff '
union all select ' 001 ' , ' ccc ' , ' eeee '
union all select ' 002 ' , ' ssss ' , ' yyyyy '
go
SELECT *
FROM (
SELECT DISTINCT
编号
FROM 表1
)A
OUTER APPLY(
SELECT
[ values ] = STUFF ( REPLACE ( REPLACE (
(
SELECT wt1 FROM 表1 N
WHERE 编号 = A.编号
FOR XML AUTO
), ' <N wt1=" ' , ' , ' ), ' "/> ' , '' ), 1 , 1 , '' )
)N
OUTER APPLY(
SELECT
[ values ] = STUFF ( REPLACE ( REPLACE (
(
SELECT wt2 FROM 表1 Na
WHERE 编号 = A.编号
FOR XML AUTO
), ' <Na wt2=" ' , ' , ' ), ' "/> ' , '' ), 1 , 1 , '' )
)Na
drop table 表1
-- 结果
/**/ /*
编号 values values
----------- --------------- -------------------
001 aaa,bbb,ccc cccc,ffff,eeee
002 ssss yyyyy
*/