求一个SQL!A字段相同时候合并B字段

h99 2012-11-30 02:42:47
表EXIME 字段 ID ,NAME 都是varchar型
当ID一样时候,把NAME放到同一个字段,用逗号隔开。
1 HUANG
1 LI
1 ZHANG
2 LIU
2 MA
3 WU

==
结果
1 HUANG,LI,ZHANG
2 LIU,MA
3 WU
...全文
598 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
十林 2012-11-30
  • 打赏
  • 举报
回复
使用CTE 有点麻烦。不过可行 DB2 和SQL server 2005以上都可以。
 

CREATE TABLE [dbo].[temp](
	[a] [varchar](20) NULL,
	[b] [varchar](20) NULL
) ON [PRIMARY]
GO
INSERT [dbo].[temp] ([a], [b]) VALUES (N'1', N' HUANG')
INSERT [dbo].[temp] ([a], [b]) VALUES (N'1', N'  LI')
INSERT [dbo].[temp] ([a], [b]) VALUES (N'1', N' ZHANG')
INSERT [dbo].[temp] ([a], [b]) VALUES (N'2', N'  LIU')
INSERT [dbo].[temp] ([a], [b]) VALUES (N'2', N'  MA')
INSERT [dbo].[temp] ([a], [b]) VALUES (N'3', N'  WU')
INSERT [dbo].[temp] ([a], [b]) VALUES (N'3', N'MA')
INSERT [dbo].[temp] ([a], [b]) VALUES (N'4', N'ERE')
INSERT [dbo].[temp] ([a], [b]) VALUES (N'4', N'DFSAF')
INSERT [dbo].[temp] ([a], [b]) VALUES (N'4', N'ADFSD')
INSERT [dbo].[temp] ([a], [b]) VALUES (N'4', N'ADFD')


;with  cte(rownum,a,b) as (
 select rownum,a,cast(b as varchar(100))from (select ROW_NUMBER() over (partition by a order by a) as rownum,a,b from dbo.temp) a where a.rownum=1
 union all
 
 select b.rownum,b.a,cast(c.b+b.b as varchar(100)) from (select ROW_NUMBER() over (partition by a order by a) as rownum,a,b from dbo.temp ) b
 inner join cte c
 on c.a=b.a
 and b.rownum=cast(c.rownum as integer)+1

 )
 select * from cte a INNER JOIN 
 (SELECT a,max(rownum) as rown from cte group by a) b  
 ON A.a=b.a
 and a.rownum=b.rown
 order  by a.a
 
發糞塗牆 2012-11-30
  • 打赏
  • 举报
回复
干嘛不去DB2那里问啊?浪费大家的时间
h99 2012-11-30
  • 打赏
  • 举报
回复
db2 的 怎么搞?
姐只想升星星 2012-11-30
  • 打赏
  • 举报
回复

select 
    a.ID ,
    NAME=stuff((select ','+NAME  from EXIME  b 
where 
    b.ID =a.ID for xml path('')),1,1,'') 'NAME '
from 
    EXIME  a
group by 
    a.ID
以学习为目的 2012-11-30
  • 打赏
  • 举报
回复
select ID,NAME=stuff((select ','+NAME  from tb where ID =a.ID for xml path('')),1,1,'')
from tb a group by ID
發糞塗牆 2012-11-30
  • 打赏
  • 举报
回复
select a.ID ,
 stuff((select ','+NAME  from EXIME  b 
        where b.ID =a.ID 
        for xml path('')),1,1,'') 'NAME '
 from EXIME  a
 group by  a.ID
开启时代 2012-11-30
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390299692 参考贴

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧