2017-03-01 13 views
0

私は過去2日間インターネットをうまく通過していませんでしたので、ここでは嫌なことに、スタックオーバーフローの善良な人々への私の最初の質問です。JSONデータからSQLテーブルへの解析

JSONデータをSQL Server(2016)テーブルに変換しようとしましたが、データにキーのない配列が含まれています。 JSONはそうのようになります。

[ 
    { 
    "year": 2016, 
    "month": 1, 
    "day": 1, 
    "breakdownTotal": [ 
     "283082", 
     "601184", 
     "140120" 
    ] 
    }, 
    { 
    "year": 2016, 
    "month": 1, 
    "day": 2, 
    "breakdownTotal": [ 
     "354725", 
     "760532", 
     "177279" 
    ] 
    } 
] 

私は、次の表を取得することができます:

year month day 
2016 1 1 
2016 1 2 

しかし、理想的に私が持っているしたいと思います:

year month day breakdown1 breakdown2 breakdown3 
2016 1 1 283082 601184 140120 
2016 1 2 354725 760532 177279 

けれどもがして何かをすることができるだろう:

year month day breakdown 
2016 1 1 283082 
2016 1 1 601184 
2016 1 1 140120 
2016 1 2 354725 
2016 1 2 760532 
2016 1 2 177279 

これは [https://msdn.microsoft.com/en-gb/library/dn921897.aspx][1] [1]:https://msdn.microsoft.com/en-gb/library/dn921897.aspxこれらの情報を抽出する方法についての説明はありません。

希望の結果を得るためのヒントはありますか?どんな助けでも大歓迎です。ロブ

+1

これはおそらくあなたを助けることができますか? https://msdn.microsoft.com/en-us/library/dn921879.aspx – Danieboy

+0

あなたが「理想的には私は持っていたいです」というのは、正規化されたデータベースではありません。良い構造ではありません。あなたの "何かをすることができるだろう"という例がはるかに良いです。後で最初の例のように_output_したい場合は、クエリなどを使って個別に行うことができます。 – ADyson

答えて

1

は(コメントでthe linkため@Danieboyのおかげで)これを試してみてください:

DECLARE @json NVARCHAR(MAX) 

SET @json='-paste your json here-'; 

SELECT * 
FROM OPENJSON(@json) 
WITH ( 
    [year] int '$.year' 
    ,[month] int '$.month' 
    ,[day] int '$.day' 
    ,[breakdown1] bigint '$.breakdownTotal[0]' 
    ,[breakdown2] bigint '$.breakdownTotal[1]' 
    ,[breakdown3] bigint '$.breakdownTotal[2]' 
) 
; 

は、悲しいことに、私はSQL 2016これをテストすることができていないを持っていません。

+1

これは絶対に完璧に機能します!迅速な対応をお寄せいただき、ありがとうございます。 – Foxinho

+1

心配はいりません。 ps。あなたの質問に対する@ADysonのコメントごとに、上記のコードは 'breakdownTotal'配列に常に3つの値があることを前提としています。より少ないものであれば、余分な列に対してはnullが返され、それ以上は含まれません。 – JohnLBevan

関連する問題