在 SQL Server 2008R2 中解析 Json 并计算值

Posted

技术标签:

【中文标题】在 SQL Server 2008R2 中解析 Json 并计算值【英文标题】:Parse Json and calculate values in SQL Server 2008R2 【发布时间】:2017-12-26 14:02:08 【问题描述】:

我使用的是 SQL Server 2008 R2 版本。我有一个名为出勤的表,它具有以下值:

Id   Date         Status
1    2017-12-20   ["id":1,"Status":"Available","id":2,"Status":"Sick Leave","id":3,"Status":"Available","id":4,"Status":"Available"]
2    2017-12-21   ["id":1,"Status":"Sick Leave","id":2,"Status":"Casual Leave","id":3,"Status":"Available","id":4,"Status":"Available"]

我需要的是

Date        Available   SickLeave  CasualLeave  Morning Permission Evening Permission 
2017-12-20    3           1           0               0               0
2017-12-21    3           1           1               0               0

我真的被困住了。有人可以帮我解决这个问题吗?

提前致谢

【问题讨论】:

【参考方案1】:

我会使用带有一些简单条件聚合的 xml .node() 方法

select 
    a.[Date],
    sum(case when substring(s.value('.', 'varchar(100)'), 1, charindex('"', s.value('.', 'varchar(100)'))-1) = 'Available' then 1 else 0 end) [Available],
    sum(case when substring(s.value('.', 'varchar(100)'), 1, charindex('"', s.value('.', 'varchar(100)'))-1) = 'Sick Leave' then 1 else 0 end) [SickLeave],
    sum(case when substring(s.value('.', 'varchar(100)'), 1, charindex('"', s.value('.', 'varchar(100)'))-1) = 'Casual Leave' then 1 else 0 end) [CasualLeave],
    sum(case when substring(s.value('.', 'varchar(100)'), 1, charindex('"', s.value('.', 'varchar(100)'))-1) = 'Morning Permission' then 1 else 0 end) [MorningPermission],
    sum(case when substring(s.value('.', 'varchar(100)'), 1, charindex('"', s.value('.', 'varchar(100)'))-1) = 'Evening Permission' then 1 else 0 end) [EveningPermission]   from
(
    select Id, [Date], cast('<m>'+replace([Status], '":"','</m><m>')+'</m>' as xml) [Status] from Attendance
) a cross apply [Status].nodes ('/m') as aa(s)
group by a.[Date]

结果:

Date        Available   SickLeave  CasualLeave  MorningPermission EveningPermission 
2017-12-20    3           1           0               0               0
2017-12-21    2           1           1               0               0

【讨论】:

非常感谢。让我尝试一下并更新发生的情况。

以上是关于在 SQL Server 2008R2 中解析 Json 并计算值的主要内容,如果未能解决你的问题,请参考以下文章