日期:2014-05-18  浏览次数:20463 次

列转行
现有如下测试数据库
序号 异常记录 调整内容
A01 1、异常记录 1、调整内容
A01 2、异常记录2 2、调整内容2
A01 3、异常记录3 3、调整内容3

这边的序号是一样的,记录数据时是每条记录分开来记录的,现在统计时想把他们合并到一起
结果为:
序号 异常记录 调整内容
A01 1、异常记录;2、异常记录2;3、异常记录3 1、调整内容;2、调整内容2;3、调整内容3

求解

------解决方案--------------------
http://blog.csdn.net/peng13nannan/article/details/7751085
------解决方案--------------------
SQL code
SELECT 序号,
异常记录=STUFF((SELECT ';'+异常记录 FROM TB WHERE 序号=T.序号 FOR XML PATH('')),1,1,''),
调整内容=STUFF((SELECT ';'+调整内容 FROM TB WHERE 序号=T.序号 FOR XML PATH('')),1,1,'')
FROM TB T
GROUP BY 序号

------解决方案--------------------
SQL code
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([序号] varchar(3),[异常记录] varchar(12),[调整内容] varchar(12))
insert [tb]
select 'A01','1、异常记录','1、调整内容' union all
select 'A01','2、异常记录2','2、调整内容2' union all
select 'A01','3、异常记录3','3、调整内容3'
go

SELECT 序号,
异常记录=STUFF((SELECT ';'+异常记录 FROM TB WHERE 序号=T.序号 FOR XML PATH('')),1,1,''),
调整内容=STUFF((SELECT ';'+调整内容 FROM TB WHERE 序号=T.序号 FOR XML PATH('')),1,1,'')
FROM TB T
GROUP BY 序号

/**
序号   异常记录                                               调整内容
---- -------------------------------------------------- ----------------------------------------
A01  1、异常记录;2、异常记录2;3、异常记录3                             1、调整内容;2、调整内容2;3、调整内容3

(1 行受影响)
**/