合并多行的某一列值

--合并多行的某一列值
--
stuff:删除指定的字符,并在指定的起点处插入另一组字符。
create table tb
(id
int,col1 varchar(10))
go

insert tb select 1 , '曾祥展'  
insert tb select 1 , '学无止境' 
insert tb select 1 , 'ok'
insert tb select 2 , 'B'

drop table tb

--函数
create function StrLink(@id int)
returns varchar(8000)
as
begin 
declare @sql varchar(8000)     
set @sql='' 
select @sql=@sql+','+col1 from tb where id=@id 
set @sql=stuff(@sql,1,1,''
return @sql
end

drop function StrLink


select * from tb
select col=dbo.StrLink(1)

/*

id   col1
-----------
1    曾祥展
1    学无止境
1    ok
2    B


     col
------------------
曾祥展,学无止境,ok

*/

 

 

 declare @Temp TABLE([Col1] varchar(50), [Col2] varchar(100)) 

Insert @Temp  
Select 'a''asd' union 
Select 'a''rdf' union 
Select 'a''dmg' union 
Select 'b''kk' union 
Select 'b''useh' 
--第一种方法
select a.[Col1],stuff((select','+b.[Col2] from @Temp as b where a.[Col1] = b.[Col1] for xml path('')),1,1,''as res 
from @Temp a 
group by a.[Col1] 

--或者
SELECT DISTINCT
[Col1],
[Col2] = SUBSTRING(( SELECT '' + [Col2] as [text()]
FROM @Temp t2
WHERE t2.Col1 = t1.Col1
FOR XML path(''), elements
), 2100
)
FROM @Temp t1


--结果:
          a asd,dmg,rdf
          b kk,useh

 

 

 

广西壮族自治区,玉林市,玉州区

 

复制代码
create index ix_id on 中国(id)
create index ix_pid on 中国(pid)

    
   -- update dbo.中国 set allname= dbo.GetAllName(id)  
   -- select   dbo.GetAllName(450902)
   
create function GetAllName (@id int)
returns varchar(8000)
as 
    begin  
        declare @sql varchar(8000)      
        set @sql='';
            with    T(flag, id, pid, [name])
                      as (select    @id as flag, id, pid, [name]
                          from      中国 a
                          where     1=1 and a.id=@id
                          union all
                          select    @id as flag, b.id, b.pid, b.[name]
                          from      中国 b
                          inner join T c on c.pid=b.id)
                 --  SELECT   *       FROM     T   WHERE pid !=0      
select  @sql=@sql+','+[name]
from    T
where   id!=1
order by id 
        set @sql=stuff(@sql, 1, 1, '')  
        return @sql

    end
复制代码

 

 

 

posted @   曾祥展  阅读(1539)  评论(0编辑  收藏  举报
编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 手把手教你更优雅的享受 DeepSeek
· 腾讯元宝接入 DeepSeek R1 模型,支持深度思考 + 联网搜索,好用不卡机!
· AI工具推荐:领先的开源 AI 代码助手——Continue
· 探秘Transformer系列之(2)---总体架构
· V-Control:一个基于 .NET MAUI 的开箱即用的UI组件库
点击右上角即可分享
微信分享提示