SQL查询两个表一个列,当该列数据相等时,将A表另一列的字串以逗号分隔连接起来,插入到B表列中。

比如:
A表 B表
列1 列2 列1 列2
a xx a
b xy b
b xt
a xe
结果是
表B
列1 列2
a xx,xe
b xy,xt

实际的表A有几十万条数据,表B只有几百。表A列1与表B相等的,有些是列2也相等,只保留连接列2不等的。

if not object_id('Tempdb..#T') is null
drop table #T
Go
Create table #T([ID] nvarchar(10),[Name] nvarchar(10))
Insert #T
select N'c',N'xx' union all
select N'b',N'xy' union all
select N'b',N'xt' union all
select N'a',N'xe'

Create table #D([ID] nvarchar(10),[Name] nvarchar(10))
Insert #D
select N'a',N'' union all
select N'b',N''
Go

update #D set #D.name=
(SELECT stuff((SELECT ',' + ISNULL([Name], '')
FROM #T t
WHERE ID = #T.ID FOR xml path('')), 1, 1, '') AS Times
FROM #T where #T.id=#D.id
GROUP BY ID)

select * from #T
select * from #D追问

讲讲思路?这个对实际几十万数据可行吗?

追答

讲讲思路? 这么清晰的条理....几百万都行,时间长短而已

追问

初学的。还有好多要学的。问一下,现在学C#,.net,sql怎么样。

温馨提示:答案为网友推荐,仅供参考
相似回答