SQL 合并行记录
各位达人,大家好,小弟遇到一个难题(SQL 2005),如下,请达人指导:
表如下:
zuhao danweibianhao danweimingcheng
1 A A公司
1 B B公司
2 C C公司
2 D D公司
2 E E公司
3 F F公司
3 G G公司
先要实现的结果:
zhuhao danweibianhao danweimingcheng
1 A,B A公司,B公司
2 C,D,E C公司,D公司 E公司
3 F,G F公司,G公司
请达人指导,谢谢!!
[解决办法]
http://topic.csdn.net/u/20080612/22/c850499f-bce3-4877-82d5-af2357857872.html
[解决办法]
--> 测试数据:[test]if object_id('[test]') is not null drop table [test]create table [test]([zuhao] int,[danweibianhao] varchar(1),[danweimingcheng] varchar(5))goinsert [test]select 1,'A','A公司' union allselect 1,'B','B公司' union allselect 2,'C','C公司' union allselect 2,'D','D公司' union allselect 2,'E','E公司' union allselect 3,'F','F公司' union allselect 3,'G','G公司'goSELECT distinct a.[zuhao],[danweibianhao]=STUFF((SELECT ','+[danweibianhao] FROM [test] bWHERE a.zuhao=b.zuhao FOR XML PATH('')),1,1,''),[danweimingcheng]=STUFF((SELECT ','+[danweimingcheng] FROM [test] bWHERE a.zuhao=b.zuhao FOR XML PATH('')),1,1,'')FROM [test] aGROUP BY a.zuhao,[danweibianhao]/*zuhao danweibianhao danweimingcheng-----------------------------------------------1 A,B A公司,B公司2 C,D,E C公司,D公司,E公司3 F,G F公司,G公司*/
[解决办法]
--> 测试数据:[tb]IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]GO CREATE TABLE [tb]([zuhao] INT,[danweibianhao] VARCHAR(1),[danweimingcheng] VARCHAR(5))INSERT [tb]SELECT 1,'A','A公司' UNION ALLSELECT 1,'B','B公司' UNION ALLSELECT 2,'C','C公司' UNION ALLSELECT 2,'D','D公司' UNION ALLSELECT 2,'E','E公司' UNION ALLSELECT 3,'F','F公司' UNION ALLSELECT 3,'G','G公司'--------------开始查询--------------------------SELECT [zuhao], danweibianhao=STUFF((SELECT ','+danweibianhao FROM [tb] WHERE [zuhao]=t.[zuhao] FOR XML PATH('')),1,1,''),danweimingcheng=STUFF((SELECT ','+danweimingcheng FROM [tb] WHERE [zuhao]=t.[zuhao] FOR XML PATH('')),1,1,'')FROM [tb] AS tGROUP BY [zuhao] ----------------结果----------------------------/* zuhao danweibianhao danweimingcheng----------- ---------------------------------------1 A,B A公司,B公司2 C,D,E C公司,D公司,E公司3 F,G F公司,G公司(3 行受影响)*/