2017-02-10 31 views
1

我有一個包含兩個屬性列和json列的產品表。我希望能夠分隔json列並插入保留屬性的額外行。樣本數據是這樣的:將OPENJSON應用於單個列

ID   Name   Attributes 
1   Nikon  {"4e7a":["jpg","bmp","nef"],"604e":["en"]} 
2   Canon  {"4e7a":["jpg","bmp"],"604e":["en","jp","de"]} 
3   Olympus  {"902c":["yes"], "4e7a":["jpg","bmp"]} 

我明白OPENJSON可以JSON對象轉換爲行和鍵值進入細胞,但我怎麼把它在一個包含JSON數據一列?

我的目標是有一個像輸出:

ID   Name   key  value 
1   Nikon   902c  NULL 
1   Nikon   4e7a  ["jpg","bmp","nef"] 
1   Nikon   604e  ["en"] 
2   Canon   902c  NULL 
2   Canon   4e7a  ["jpg","bmp"] 
2   Canon   604e  ["en","jp","de"] 
3   Olympus  902c  ["yes"] 
3   Olympus  4e7a  ["jpg","bmp"] 
3   Olympus  604e  NULL 

有沒有一種方法,我可以查詢該產品的表樣的?或者有沒有辦法重現我的目標數據集?

SELECT 
    ID, 
    Name, 
    OPENJSON(Attributes) 
FROM products 

謝謝!

回答

4

這裏至少會讓你朝正確的方向發展。

SELECT P.ID, P.[Name], AttsData.[key], AttsData.[Value] 
FROM products P CROSS APPLY OPENJSON (P.Attributes) AS AttsData 

有我卡住了一下,現在是缺失值(值在結果爲空)的一件事...

我在想,也許的做某種外部/全背加盟對此,但即使這讓我頭痛。你確定你需要嗎?或者,你可以使用上面的SQL輸出來進行存在檢查嗎?

我將繼續留在此處。如果我找到與您的輸出完全匹配的解決方案,我將添加到此答案。

直到那時......祝你好運!

+0

嘿R.Richards, 這太好了。我可能能夠擺動這個沒有NULL,但如果我不能,是的,檢查它是否不存在,並插入另一行。 非常感謝! – onji

相關問題