日期:2014-05-18 浏览次数:20647 次
--> 测试数据:[test]
if object_id('[test]') is not null
drop table [test]
create table [test](
[zuhao] int,
[danweibianhao] varchar(1),
[danweimingcheng] varchar(5)
)
go
insert [test]
select 1,'A','A公司' union all
select 1,'B','B公司' union all
select 2,'C','C公司' union all
select 2,'D','D公司' union all
select 2,'E','E公司' union all
select 3,'F','F公司' union all
select 3,'G','G公司'
go
SELECT distinct a.[zuhao],
[danweibianhao]=STUFF((SELECT ','+[danweibianhao]
FROM [test] b
WHERE a.zuhao=b.zuhao FOR XML PATH('')),1,1,''),
[danweimingcheng]=STUFF((SELECT ','+[danweimingcheng]
FROM [test] b
WHERE a.zuhao=b.zuhao FOR XML PATH('')),1,1,'')
FROM [test] a
GROUP 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 ALL
SELECT 1,'B','B公司' UNION ALL
SELECT 2,'C','C公司' UNION ALL
SELECT 2,'D','D公司' UNION ALL
SELECT 2,'E','E公司' UNION ALL
SELECT 3,'F','F公司' UNION ALL
SELECT 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 t
GROUP BY [zuhao]
----------------结果----------------------------
/*
zuhao danweibianhao danweimingcheng
----------- ---------------------------------------
1 A,B A公司,B公司
2 C,D,E C公司,D公司,E公司
3 F,G F公司,G公司
(3 行受影响)
*/