问题描述
"A" : [1,2,3],"A" : [4,5,6],"A" : [7,8,9],"B" : [10,11,12]
"B" : [13,14,15]
"B" : [16,17,18]
我需要它看起来像这样:
"A" : [1,3,4,6,7,12,13,15,16,18]
如何在流分析中根据其字母合并阵列?我尝试过的所有汇总函数都无济于事。
谢谢-
解决方法
我认为这样的事情
drop table if exists dbo.test_table;
go
create table dbo.test_table(
letter char(3) not null,string varchar(20) not null);
insert dbo.test_table(letter,string) values
('"A"','[1,2,3]'),('"A"','[4,5,6]'),'[7,8,9]'),('"B"','[10,11,12]'),'[12,14,15]'),'[16,17,18]');
select letter,concat('[',string_agg(cast(intg.value as varchar(9)),',') within group (order by intg.value),']') colName
from dbo.test_table t
cross apply
string_split(substring(string,len(string)-2),') intg
group by letter;
结果
letter colName
"A" [1,3,4,6,7,9]
"B" [10,12,15,16,18]
,
最好的方法是将GROUP BY 并使用COLLECT()作为汇总。这将给您{name:“ A”,val:[[1,3],[4,6],[7,9]]},...
然后使用JavaScript UDF展平数组数组。
以下是一些文档链接:
https://docs.microsoft.com/en-us/stream-analytics-query/collect-azure-stream-analytics
谢谢!