我有一个数组/字符串
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];