0

レポートのデータソースとして使用しようとしているJSONファイルがネストされています。私は構造体を「平坦化」していますが、兄弟データをどのように評価するかはわかりません。SQLサーバーがネストされたJSONデータ構造内でデータを取得しています

サンプルデータ:

{ 
"Cources": [{ 
     "ID": 1, 
     "Name": "MAC100", 
     "Room": 100, 
     "TAID": 123, 
     "StudentsIDs": [ 
      1, 2 
     ] 
    } 
], 

"TAs": [{ 
    "ID": 123, 
    "Name": "Joe", 
    "LName": "Smith" 
}], 

"Students": [{ 
    "ID": 1, 
    "LName": "Clark" 
}, { 
    "ID": 2, 
    "LName": "Peterson" 
}] 
} 

SQL Serverの:データファイルを取り込み、レポートのデータをフラット化:私は「StudentIDsに "学生" からすべての生徒データを取得する方法でつまずいている

SELECT Cource.ID, 
Cource.Name as CName, 
Cource.Room as CRoom, 
CourceStudents.LName 

FROM OPENROWSET (BULK 'C:\Data\file.json', SINGLE_CLOB) as jsonfile 

CROSS APPLY OPENJSON(BulkColumn,'$[0]') WITH( 

    Cources nvarchar(max) AS JSON, 
    TAs nvarchar(max) AS JSON, 
    Students nvarchar(max) AS JSON 

    ) AS [SampleData] 

CROSS APPLY OPENJSON(Cources) WITH (
    Room integer, 
    Name nvarchar(max), 
    StudentsIDs nvarchar(max) AS JSON 
) as [Cources] 

CROSS APPLY OPENJSON(Students) WITH ( 
    ID integer, 
    LName nvarchar(max), 
) as [Students] 

CROSS APPLY OPENJSON(StudentsIDs) WITH ( 
**//??? how to get full data for the student from "Students" joining by the student ID ?** 
) as [CourceStudents] 

"IDによる参加。

+0

あなたは出力が見えるように何をしたいですか?また、生徒がどのようなCourceにいるかのような数字の文字列を持つことは、良いdbデザインではありません。 – dfundako

+0

このデータはDBには格納されません。私は、SQL Serverを使用して、ライフデータのストリームからレポートを生成しています。私はすべての情報を持つテーブルの行に似てJSON構造を平坦化しようとしています:Cources.ID、Students.ID、Students.LName – kaplievabell

答えて

0

私は、WHERE句持っているように私にallowerdれ、そこにJSONデータをインポートし、一時テーブルを作成:

DROP TABLE IF EXISTS tempdb.dbo.#temp; 
CREATE TABLE #temp (
InfoJson nvarchar(max) 
) 

ALTER TABLE #temp 
ADD CONSTRAINT [Content should be formatted as JSON] 
CHECK (ISJSON(InfoJson)> 0) 

Insert INTO #temp (InfoJson) 
SELECT * 
FROM OPENROWSET (BULK 'C:\Data\file.json', SINGLE_CLOB) as j; 

SELECT Cource.ID, 
Cource.Name as CName, 
Cource.Room as CRoom, 
CourceStudents.LName 
FROM #temp 

CROSS APPLY OPENJSON(InfoJson,'$') WITH( 
    Cources nvarchar(max) AS JSON, 
    TAs nvarchar(max) AS JSON, 
    Students nvarchar(max) AS JSON 
    ) AS [SampleData] 

CROSS APPLY OPENJSON(Cources) WITH (
    Room integer, 
    Name nvarchar(max), 
    StudentsIDs nvarchar(max) AS JSON 
) as [Cources] 

CROSS APPLY OPENJSON(StudentsIDs) WITH (
    value nvarchar(100) '$' 
) as [StudentsIDs] 

CROSS APPLY OPENJSON(Students) WITH ( 
    ID integer, 
    LName nvarchar(max), 
) as [Students] 

WHERE StudentsIDs.value=Students.ID 
関連する問題