如何聚合数组中相同索引的项



我有一个数组/字符串

tbody> <<tr>
DateTime 列A
4/1/2022 17点[10、5、1 0 2)
4/1/2023 18:00[5 2 0 1 3)

在我看来,这有点乱,但是"行得通"。在这里,您需要像对待JSON一样对待您的数据,因为(至少对于我们的示例)它是一个有效的JSON数组。

我们可以使用OPENJSON将数据分割成行,然后聚合每个key(这实际上是序数位置)。这给了我们想要的值,但是以行形式。

之后,我们可以使用STRING_AGG,在两端连接一对括号([])来重新构建JSON数组::

WITH CTE AS(
SELECT MIN(CONVERT(date,V.DateTime)) AS [Date],
SUM(TRY_CONVERT(int,value)) AS Agg,
OJ.[key]
FROM (VALUES(CONVERT(datetime2(0),'4/1/2022 17:00',103),N'[10,5,1,0,2]'),
(CONVERT(datetime2(0),'4/1/2023 18:00',103),N'[5,2,0,1,3]'))V(DateTime,ColumnA)
CROSS APPLY OPENJSON(V.ColumnA) OJ
GROUP BY OJ.[key])
SELECT [Date],
N'[' + STRING_AGG(Agg,',') WITHIN GROUP (ORDER BY [key]) + N']' AS ColumnA
FROM CTE
GROUP BY [Date];

最新更新