字符串拆分、列值合并

一字符串拆分:

1.使用函数

select 'a,b,23,45,56' Str,value Val from string_split('a,b,23,45,56',',')

 2.使用存储过程


ALTER  proc [dbo].[usp_BIZ_Divide2]
@Str nvarchar(255)
as
begin
SET NOCOUNT ON
DROP  TABLE IF EXISTS  Divide_Str
create table Divide_Str(Str nvarchar(255),Val nvarchar(255))
declare @startindex int
declare @endindex int
declare @currresult nvarchar(255)
set @startindex = 1 
set @endindex = 1 
while 1 = 1
begin
    set @endindex =charindex(',',@Str,@startindex);
    if @endindex = 0
        set @endindex=LEN(@Str)+1  
    set @CurrResult=SUBSTRING(@Str,@startindex,@endindex-@startindex)
    insert into Divide_Str values(@Str,@currresult)  
    set @startindex=@endindex+1   
    if @CurrResult is null or @CurrResult='' or @endindex=LEN(@Str)+1  
      break;  
end
select * from Divide_Str   
SET NOCOUNT OFF
end

二列值合并:

1.使用函数:

SELECT [雇员名称],STRING_AGG([客户名称],',') from customer  group by [雇员名称]

2.利用FOR XML PATH/AUTO

SELECT *
FROM(
    SELECT DISTINCT 
        雇员名称
    FROM Customer
)A
OUTER APPLY(
    SELECT 
        [服务客户名称列表]=
            (STUFF( REPLACE(REPLACE((
                SELECT 客户名称 FROM Customer N
                WHERE 雇员名称 = A.雇员名称
                FOR XML AUTO
           ), '<N 客户名称="',';'),'"/>',''),1,1,''))
)N

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值