我正在尝试在 sql 中为每个组构建逗号分隔列表,因为我正在使用并行数据仓库,所以我需要在不使用 FOR XML 或递归函数(不支持)的情况下执行此操作。
任何其他方式来实现这一目标?
Input:
ID Value
1 2
1 3
1 4
2 1
2 10
Output:
ID List
1 2,3,4
2 1,10
我正在尝试在 sql 中为每个组构建逗号分隔列表,因为我正在使用并行数据仓库,所以我需要在不使用 FOR XML 或递归函数(不支持)的情况下执行此操作。
任何其他方式来实现这一目标?
Input:
ID Value
1 2
1 3
1 4
2 1
2 10
Output:
ID List
1 2,3,4
2 1,10
这根本不会执行良好,因此如果您需要性能,我建议您使用其他一些解决方案(如 SQL Server 链接服务器到 PDW)。但我相信这应该适用于 PDW:
declare @ID int = (select min(ID) from tbl);
declare @Value int = -1;
declare @concat varchar(8000) = '';
create table #tmp (
ID int,
[concat] varchar(8000)
)
with (distribution=hash(ID), location=user_db);
while @ID is not null
begin
set @Value = (select min([Value]) from tbl where ID = @ID and [Value]>@Value);
if @Value is not null
set @concat = @concat + case when @concat = '' then '' else ',' end + cast(@Value as varchar(8000));
else
begin
insert #tmp (ID, [concat])
values (@ID, @concat);
set @ID = (select min(ID) from tbl where ID > @ID);
set @Value = -1;
set @concat = '';
end
end
select * from #tmp;
drop table #tmp;