阅读 182

SQLServer中JSON文档型数据的查询问题解决

SQLServer中JSON文档型数据的查询问题解决

SQL Server 对于数据平台的开发者来说越来越友好,下面这篇文章主要给大家介绍了关于SQLServer中JSON文档型数据的查询问题的解决方法,需要的朋友可以参考下

近日在项目中遇到一个问题: 如何在报表中统计JSON格式存储的数据?

例如有个调查问卷记录表,记录每个问题的答案。 其结构示意如下(横表设计)

IduserdateQ1_AnswerQ2_AnswerQ3_Answer
行Id答题用户答题日期问题一结果问题二结果问题三结果

在[Q1_Answer]、[Q2_Answer]、[Q3_Answer]中记录的数据格式是JSON文档内容,因为是选项值,而且考虑到可能有多选, 所以存储的格式如下:

1
2
3
4
1 [
     {"code":"a", "desc":"Jan."},
     {"code":"b", "desc":"Feb."}
  ]

其中 code 表示选项, desc 表示选项的文字描述。

现在,用户想用PowerBI 来实现对结果的统计。有如下几个问题:

  • 在Power BI中,无法直接从JSON数据中读取到选项值

  • 如果是多选,又该如何处理。

比较适合分析的数据结构应该长这样:

行Id答题用户答题日期问题编号用户选项选项文字
1user12021-6-26Q1AJan.
2user12021-6-26Q2AMon.
3user12021-6-26Q2BTue.
4user12021-6-26Q3ASwimming
6user22021-6-26Q1BFeb.
7user22021-6-26Q2......

 注意,上述Q2用户填了2个选项。 本身问卷设定就是支持多选的。 用JSON文档结构保存数据, 主要是为了方便采集和数据存取。因此要额外做些数据处理, 使采集的数据便于统计。

笔者经过一些调查, 发现可以结合使用UNPIVOT和OPENJSON方法来达到理想的效果。 具体过程如下:

准备表格和初始化数据

1
2
3
4
5
6
7
8
-- 1 create table
Create Table T_Questionaire(id int identity(1,1) primary key, username varchar(100), t1 nvarchar(500),t2 nvarchar(500),t3 nvarchar(500), dt datetime)
 
 
-- 2 init data
Insert into T_Questionaire( username, t1, t2, t3, dt)
values ('John' , '[{"code":"a", "desc":"Monday"}]', '[{"code":"a", "desc":"Jan."}]', '[{"code":"b", "desc":"2021"}]' ,getdate())
 ,     ('Alice' , '[{"code":"b", "desc":"Tuesday"}]', '[{"code":"a", "desc":"Jan."}, {"code":"b", "desc":"Feb."}]', '[{"code":"a", "desc":"2020"},{"code":"b", "desc":"2021"}]' ,getdate())

数据内容:

 创建转换视图:

1
2
3
4
5
6
7
8
9
10
Create   or alter view V_VerticalQuestionaire
as
with pt as (
select a.username, a.T, a.answers,  a.dt from dbo.T_Questionaire a
unpivot
  (  answers for T in (t1,t2,t3  ))
a)
select pt.username, pt.dt, pt.T , aw.code, aw.[desc]
from pt
  cross apply openjson(answers) WITH (code NVARCHAR(100) '$.code', [desc] NVARCHAR(100) '$.desc') aw

查询结果如下:

 总结下解决的思路:

1 先用unpivot将列行转换, 使横表记录变成纵表记录

2 使用openjson 将json数据转换为集合数据, 然后使用cross apply 将集合展开

好了,到此这篇关于SQLServer中JSON文档型数据的查询问题解决的文章就介绍到这了,更多相关SQLServer中JSON数据查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

  • SQL Server中将查询结果转换为Json格式脚本分享

  • SqlServer将查询结果转换为XML和JSON


原文链接:https://www.cnblogs.com/huwz/p/14934180.html


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐