group by JSON包含数组的列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了group by JSON包含数组的列相关的知识,希望对你有一定的参考价值。

我有下表:

Table

包含这些数据:

Data

如何按我的JSON列中的数组项进行分组?得到这个结果:

Expected Result

答案

您可以尝试使用OPENJSONCROSS APPLY来制作它。

SELECT
    col1,
     UserID
FROM T t1
CROSS APPLY
    OPENJSON(t1.Roles)
    WITH
        (
            col1 varchar(50) N'$'
        ) AS a

sqlfiddle

另一答案

如果你不能使用OPENJSON,这里有一个替代方案

Select
    aRole, COUNT(*) as cnt
From (

    Select
        a.ID
        ,b.Items as aRole
    From 
        (Select *
            ,replace(replace(replace(Roles,'[',''),']',''),'"','') as Rolesx
         From JSONgroup) a
    Cross Apply dbo.Split(a.Rolesx, ',') b
) c
 group by aRole

以上是关于group by JSON包含数组的列的主要内容,如果未能解决你的问题,请参考以下文章

ORDER BY 子句中的列无效,因为它不包含在聚合函数或 GROUP BY 子句中

SQL:选择列表中的列无效,因为它不包含在聚合函数或 GROUP BY 子句中[关闭]

选择列表中的列“X”无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中

选择列表中的列……无效,因为该列没有包含在聚合函数或 GROUP BY 子句中

选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中

选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中