繁体   English   中英

反转为 STRING_AGG

[英]Reverse to STRING_AGG

这是我们正在进一步处理的示例数据。

create table #tmp (id int identity(1,1), na varchar(10),me varchar(10))
insert into #tmp (na,me)
values 
('a','t'),
('a','u'),
('a','v'),
('a','w'),
('b','x'),
('b','y'),
('b','z')
select * from #tmp

我的问题是,对于 SQL 服务器,是否存在与STRING_AGG function 完全相反的情况?

就像我将STRING_AGG与以下代码合并

select na, STRING_AGG(me,',') as me into #tmp1 from #tmp group by na
select * from #tmp1

我需要逆转这个过程,但我不得不使用 CURSOR,所以我正在寻找替代解决方案。

下面是 cursor 代码,以便更好地理解其用途。

declare @na varchar(10)
declare @me varchar(max)
create table #tmp3 (na varchar(10),me varchar(10))

declare dbc cursor for select na, me from #tmp1
open dbc

while 1=1
begin
    fetch next from dbc into @na, @me

    if @@FETCH_STATUS <> 0
        break;

    insert into #tmp3 (na,me)
    select @na, value
    from string_split(@me,',')
    
end

close dbc
deallocate dbc

select * from #tmp3

--Delete temp table

drop table #tmp
drop table #tmp1
drop table #tmp3

有类似的string_split可用,可以使用,例如

对于每个使用cross applystring_agg ,我们可以将它们转换回行,

select na,c.value
  from 
(select na, string_agg(me,',') as me
   from #tmp 
  group by na
) t
cross apply string_split(me, ',') c;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM