首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求一条结合字符串的sql

2013-09-06 
求一条组合字符串的sqlanamec001abc鞍山002bcd沈阳003bcd沈阳004bcd大连005cdf大连006cdf大连现在想得到的

求一条组合字符串的sql
a    name     c
001  abc   鞍山
002  bcd   沈阳
003  bcd   沈阳
004  bcd   大连
005  cdf   大连
006  cdf   大连




现在想得到的结果是

a          name       c
001         abc       鞍山
002,003     bcd       沈阳
004         bcd       大连
005,006     cdf       大连

如果name和c字段都相同,则合并用逗号分隔



[解决办法]


;with cte as(
select '001' as a,'abc' as name,'鞍山' as c
union all select '002','bcd','沈阳'
union all select '003','bcd','沈阳'
union all select '004','bcd','大连'
union all select '005','cdf','大连'
union all select '006','cdf','大连'
)

select stuff((select ','+a from cte b 
       where b.c=a.c and a.name=b.name
       for xml path('')),1,1,'') 'a'
       ,a.name,a.c
from cte a
group by  a.name,a.c
order by c

/*
anamec
001abc鞍山
004bcd大连
005,006cdf大连
002,003bcd沈阳
*/

[解决办法]
if OBJECT_ID('tempdb..#temp', 'u') is not null   drop table #temp;
go
create table #temp( [a] varchar(100), [name] varchar(100), [c] varchar(100));
insert #temp
select '001','abc','鞍山' union all
select '002','bcd','沈阳' union all
select '003','bcd','沈阳' union all
select '004','bcd','大连' union all


select '005','cdf','大连' union all
select '006','cdf','大连' 

--SQL:
SELECT
a = STUFF((SELECT ','+a FROM #temp b WHERE b.c=a.c AND b.name=a.NAME ORDER BY b.a FOR XML PATH('')),1,1,''),
a.NAME,
a.c
FROM #temp A
GROUP BY a.name, a.c
ORDER BY MIN(a.a)

/*
aNAMEc
001abc鞍山
002,003bcd沈阳
004bcd大连
005,006cdf大连
*/


[解决办法]
二楼正解,一楼排序有点问题
[解决办法]
今天有好几个网友问这个问题

SELECT a = STUFF(
(SELECT ','+[a],t2.[name],t2.c FROM [Table_3] t1
WHERE t1.[name]=t2.[name] AND t1.[c] =t2.[a] ORDER BY t1.a DESC FOR XML PATH('')),1,1,'')
FROM [Table_3] t2 GROUP BY t2.[name],t2.[c]

楼主可以去看看下面这个帖子
http://bbs.csdn.net/topics/390565330

热点排行