2017-02-10 11 views
1

私は2つの属性列とjson列を持つ製品テーブルを持っています。私はjson列を区切り、余分な行を挿入して属性を保持できるようにしたいと考えています。私はOPENJSON行に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"]} 

:のようなサンプルデータが見えますか?

私の目標は次のように出力させることです。

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 

私は今少し立ち往生している一つのことは、欠損値(値が結果にnullである)である...

私は多分いっぱい/外側バック結合のいくつかの並べ替えをやって考えていましたこれにも、それは私に頭痛を与えている。あなたはそれが必要だと確信していますか?または、上記のSQLの出力を使って存在チェックを行うことができますか?

私はこれを続けるつもりです。あなたの出力と正確に一致する解決策が見つかったら、私はこの回答に追加します。

それまで...幸運!

+0

Hey R.Richards、 これは素晴らしいです。私はNULLを使用せずにこれをスイングすることができるかもしれませんが、できない場合は、存在しないかどうかを確認して別の行を挿入してください。 ありがとうございました! – onji

関連する問題