Переменная JSON в SQL - PullRequest
2 голосов
/ 07 июня 2019

Я пытаюсь извлечь файл JSON с помощью сервера SQL.Я могу получить первую строку, но не могу понять, как автоматически увеличить строку, чтобы выбрать все значения в исходном файле.

Я пробовал цикл while с объединением всех рекурсивных запросов.,Проблема в том, что я не могу получить переменную внутри строки.

Вот мой оператор выбора:

SELECT * 
FROM OPENJSON (@JSONFILE, '$.series')
WITH (
    Series_id VARCHAR(255)  '$.series_id',
    Name VARCHAR(255)   '$.name',
    Units VARCHAR(255)  '$.units',
    Frequency VARCHAR(255)  '$.f',
    Description VARCHAR(255)'$.description',
    Source VARCHAR(255) '$.source',
    Country VARCHAR(255)    '$.geography',
    Date INT        '$.data[**0**][0]',
    count INT       '$.data[**0**][1]'
    )

Жирное число должно быть автоматически увеличено через исходный файл, которыйвыглядит следующим образом:

"series": [
    {
        "series_id": "PET.MCRFPUS2.M",
        "name": "U.S. Field Production of Crude Oil, Monthly",
        "units": "Thousand Barrels per Day",
        "f": "M",
        "unitsshort": "Mbbl/d",
        "description": "U.S. Field Production of Crude Oil",
        "copyright": "None",
        "source": "EIA, U.S. Energy Information Administration",
        "iso3166": "USA",
        "geography": "USA",
        "start": "192001",
        "end": "201901",
        "updated": "2019-03-29T12:45:52-0400",
        "data": [
            [
                "201901",
                11871
            ],
            [
                "201812",
                11961
            ],
            [
                "201811",
                11926
            ],
            [
                "201810",
                11559
            ],
            [
                "201809",
                11470

...

Оператор выбора должен автоматически увеличиваться на элементах "data" select

1 Ответ

2 голосов
/ 07 июня 2019

Вы можете попробовать следующее утверждение. Вам необходимо добавить столбец data в явную схему с помощью AS JSON и использовать дополнительные CROSS APPLY.

JSON:

DECLARE @json nvarchar(max) =
N'{
"series": [
    {
        "series_id": "PET.MCRFPUS2.M",
        "name": "U.S. Field Production of Crude Oil, Monthly",
        "units": "Thousand Barrels per Day",
        "f": "M",
        "unitsshort": "Mbbl/d",
        "description": "U.S. Field Production of Crude Oil",
        "copyright": "None",
        "source": "EIA, U.S. Energy Information Administration",
        "iso3166": "USA",
        "geography": "USA",
        "start": "192001",
        "end": "201901",
        "updated": "2019-03-29T12:45:52-0400",
        "data": [
            [
                "201901",
                11871
            ],
            [
                "201812",
                11961
            ],
            [
                "201811",
                11926
            ],
            [
                "201810",
                11559
            ],
            [
                "201809",
                11470
            ]
       ]
  }
]
}'

Оператор SELECT:

SELECT 
    j1.Series_id,
    j1.Name,
    j1.Units,
    j1.Frequency,
    j1.Description,
    j1.Source,
    j1.Country,
   j2.*
FROM OPENJSON(@json, '$.series') WITH (
    Series_id VARCHAR(255)  '$.series_id',
    Name VARCHAR(255)   '$.name',
    Units VARCHAR(255)  '$.units',
    Frequency VARCHAR(255)  '$.f',
    Description VARCHAR(255)'$.description',
    Source VARCHAR(255) '$.source',
    Country VARCHAR(255)    '$.geography',
    data NVARCHAR(max) '$.data' AS JSON
) j1
CROSS APPLY OPENJSON(j1.data) WITH (
    Date INT '$[0]',
    count INT '$[1]'
) j2

Выход:

Series_id       Name                                        Units                       Frequency   Description                         Source                                      Country Date    count
PET.MCRFPUS2.M  U.S. Field Production of Crude Oil, Monthly Thousand Barrels per Day    M           U.S. Field Production of Crude Oil  EIA, U.S. Energy Information Administration USA     201901  11871
PET.MCRFPUS2.M  U.S. Field Production of Crude Oil, Monthly Thousand Barrels per Day    M           U.S. Field Production of Crude Oil  EIA, U.S. Energy Information Administration USA     201812  11961
PET.MCRFPUS2.M  U.S. Field Production of Crude Oil, Monthly Thousand Barrels per Day    M           U.S. Field Production of Crude Oil  EIA, U.S. Energy Information Administration USA     201811  11926
PET.MCRFPUS2.M  U.S. Field Production of Crude Oil, Monthly Thousand Barrels per Day    M           U.S. Field Production of Crude Oil  EIA, U.S. Energy Information Administration USA     201810  11559
PET.MCRFPUS2.M  U.S. Field Production of Crude Oil, Monthly Thousand Barrels per Day    M           U.S. Field Production of Crude Oil  EIA, U.S. Energy Information Administration USA     201809  11470
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...