欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQLServer中JSON文檔型數據的查詢問題解決

 更新時間:2021年06月27日 12:05:16   作者:Weizheng  
SQL Server 對于數據平臺的開發(fā)者來說越來越友好,下面這篇文章主要給大家介紹了關于SQLServer中JSON文檔型數據的查詢問題的解決方法,需要的朋友可以參考下

近日在項目中遇到一個問題: 如何在報表中統(tǒng)計JSON格式存儲的數據?

例如有個調查問卷記錄表,記錄每個問題的答案。 其結構示意如下(橫表設計)

Id user date Q1_Answer Q2_Answer Q3_Answer
行Id 答題用戶 答題日期 問題一結果 問題二結果 問題三結果

在[Q1_Answer]、[Q2_Answer]、[Q3_Answer]中記錄的數據格式是JSON文檔內容,因為是選項值,而且考慮到可能有多選, 所以存儲的格式如下:

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

其中 code 表示選項, desc 表示選項的文字描述。

現(xiàn)在,用戶想用PowerBI 來實現(xiàn)對結果的統(tǒng)計。有如下幾個問題:

  • 在Power BI中,無法直接從JSON數據中讀取到選項值
  • 如果是多選,又該如何處理。

比較適合分析的數據結構應該長這樣:

行Id 答題用戶 答題日期 問題編號 用戶選項 選項文字
1 user1 2021-6-26 Q1 A Jan.
2 user1 2021-6-26 Q2 A Mon.
3 user1 2021-6-26 Q2 B Tue.
4 user1 2021-6-26 Q3 A Swimming
6 user2 2021-6-26 Q1 B Feb.
7 user2 2021-6-26 Q2 ... ...

 注意,上述Q2用戶填了2個選項。 本身問卷設定就是支持多選的。 用JSON文檔結構保存數據, 主要是為了方便采集和數據存取。因此要額外做些數據處理, 使采集的數據便于統(tǒng)計。

筆者經過一些調查, 發(fā)現(xiàn)可以結合使用UNPIVOT和OPENJSON方法來達到理想的效果。 具體過程如下:

準備表格和初始化數據

-- 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())

數據內容:

 創(chuàng)建轉換視圖:

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數據查詢內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SQL?Server?2022?AlwaysOn新特性之包含可用性組詳解

    SQL?Server?2022?AlwaysOn新特性之包含可用性組詳解

    這篇文章主要介紹了SQL?Server?2022?AlwaysOn新特性之包含可用性組介紹,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 使用SqlServer CTE遞歸查詢處理樹、圖和層次結構

    使用SqlServer CTE遞歸查詢處理樹、圖和層次結構

    遞歸CTE是SQL SERVER 2005中重要的增強之一。一般我們在處理樹,圖和層次結構的問題時需要用到遞歸查詢。本文給大家詳解使用sqlserver cte遞歸查詢出來樹、圖和層次結構,本文介紹的非常詳細,感興趣的朋友一起看看吧
    2015-11-11
  • SQL Server 數據頁緩沖區(qū)的內存瓶頸分析

    SQL Server 數據頁緩沖區(qū)的內存瓶頸分析

    數據頁緩存是SQL Server的內存使用主要的方面,也是占用量最大的部分。在一個穩(wěn)定的DB Server上,這部分內存使用會相對較穩(wěn)定
    2012-08-08
  • 一個過濾重復數據的 SQL 語句

    一個過濾重復數據的 SQL 語句

    一個過濾重復數據的 SQL 語句...
    2006-12-12
  • SQL Server查詢前N條記錄的常用方法小結

    SQL Server查詢前N條記錄的常用方法小結

    這篇文章主要介紹了SQL Server查詢前N條記錄的常用方法,以實例形式分析總結了SQL Server查詢數據庫的三種常用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • 隱藏在SQLServer 字段中的超詭異字符解決過程

    隱藏在SQLServer 字段中的超詭異字符解決過程

    這套系統(tǒng)做了大半年,這個導入導出還是問題不斷,我負責的這塊導入導出就是夾在網絡版和單機版系統(tǒng)之間,只要任何一邊對數據庫做了改動這個導入導出就會失敗。哎,煩心的事不止這些,最近又遇到了一個非常奇怪的問題。
    2009-10-10
  • SQLServer數據庫處于恢復掛起狀態(tài)的解決辦法

    SQLServer數據庫處于恢復掛起狀態(tài)的解決辦法

    這篇文章主要介紹了SQLServer數據庫處于恢復掛起狀態(tài)的解決辦法 ,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • SQL Server數據庫備份加密的方法詳解

    SQL Server數據庫備份加密的方法詳解

    在數據即資產的今天,保護數據庫備份免受未授權訪問是至關重要的,SQL Server提供了強大的安全特性,包括對數據庫備份進行加密的能力,本文將深入探討如何在SQL Server中實現(xiàn)數據庫的自定義數據備份加密,需要的朋友可以參考下
    2024-08-08
  • php使用pdo連接sqlserver示例分享

    php使用pdo連接sqlserver示例分享

    在開發(fā)PHP程序時我們可以借助多種連接方式訪問各類的數據庫獲取所需的數據。自PHP5以來PDO作為新生事物將所有數據庫接口收入囊中,為開發(fā)人員提供了方便快捷的數據庫讀取方式。本文將介紹如何在Linux服務器配置PHP與SQL Server的連接
    2014-01-01
  • SQL Server自動生成日期加數字的序列號

    SQL Server自動生成日期加數字的序列號

    需要生成下面的序列號,前半部分是yyyymmdd格式的年月日時間數字,后半部分則是每天都從1順序增長的數字,位數要固定,中間不足的補0。
    2009-08-08

最新評論