2017-09-29 48 views
0

我正在支持一個製作精良的網頁,該網頁將屏幕上的所有數據作爲長JSON字符串保存在一個SQL列中。像這樣:SQL - 從JSON鍵/值對創建列

{"companies":[{"__type":"MyReplacementCompany:#LifeEApplication.GAINWeb.Utilities.Classes","data":[]}],"data":[{"Key":"existing_insurance","Value":"false"},{"Key":"replace_existing","Value":"false"}]} 

這是毛病,我正在重做這頁的中間正常。但是,我需要將所有當前記錄都放入我重新設計的數據庫中,並且無法將此列中的值拉出來。

使用parseJSON,我能夠得到的數據進行這一領域的進入這樣的:

enter image description here

我從這種方法得到的數據轉移到表像這樣掙扎:

enter image description here

有什麼建議嗎?

+0

你可以分享你沒有 –

+0

我還沒有找到任何工作,我需要它的方式的代碼。所以我很遺憾沒有任何代碼發佈。我已經通過解析的JSON嘗試了'while循環,但我不確定如何將循環記錄轉換爲我需要的表格格式。 – Holt

+0

是否要將json的值保存到表中? –

回答

0

下面的東西可能是你需要的東西。這將特別創建一個包含輸出列的表,爲每個輸入行分配一個唯一的行標識符(rownum),然後使用該標識符將JSON解析器輸出的單獨行中的各個屬性連接在一起。

create table compdata (
    company_name varchar(100), 
    insured_name varchar(100), 
    policy_number varchar(100), 
    face_amount money 
    ); 

with parsed_json as (
    select 
     row_number() over() as rownum, 
     parseJSON(your_json_data_column) 
    from 
     your_input_table 
    ) 
insert into compdata 
    (company_name, insured_name, policy_number, face_amount) 
from 
    (select rownum, StringValue from parsed_json where parent_id = 1) as company_name 
    inner join (select id, StringValue from parsed_json where parent_id = 2) as insured_name 
     on insured_name.rownum = company_name.rownum 
    inner join (select rownum, StringValue from parsed_json where parent_id = 3) as policy_number 
     on policy_number.rownum = company_name.rownum 
    inner join (select rownum, StringValue from parsed_json where parent_id = 4) as face_amount 
     on face_amount.rownum = company_name.rownum 
    ; 
+0

這是語法正確嗎?我一直從Line14開始收到語法錯誤。 – Holt

+0

什麼是錯誤? –