#sql #json #sql-server
#sql #json #sql-сервер
Вопрос:
У меня есть таблица, в которой у меня есть данные JSON, а тип поля — NVARCHAR (4000)
[
{"number":1,"booked":0},
{"number":2,"booked":0},
{"number":3,"booked":0},
{"number":4,"booked":1},
{"number":5,"booked":0},
{"number":6,"booked":0},
{"number":7,"booked":0},
{"number":8,"booked":0}
]
Я хочу запросить это поле массива и хочу, чтобы на выходе было указано, что количество забронированных равно 1, а не забронированных — 7.
Я использовал JSON_VALUE()
, JSON_QUERY()
функции, но не попал в точку.
Я также хочу, чтобы это число: 4 забронировано.
Я использую SQL Server 2016
Комментарии:
1.
I am using SQL Server 2016
… тогда почему вы отметили MySQL?
Ответ №1:
Привет, если я понимаю все, что вы пытаетесь сделать, этот пример может ответить :
DECLARE @json NVARCHAR(MAX)
SET @json =
N'[
{"number":1,"booked":0},
{"number":2,"booked":0},
{"number":3,"booked":0},
{"number":4,"booked":1},
{"number":5,"booked":0},
{"number":6,"booked":0},
{"number":7,"booked":0},
{"number":8,"booked":0}
]'
SELECT number, booked
FROM OPENJSON(@json)
WITH (number int 'strict $.number', booked int 'strict $.booked')
WHERE booked = 1
В будущем предложите, пожалуйста, предоставить некоторые данные и исключенный вывод и запросить, что вы пытаетесь.
Ответ №2:
[
{"number":1,"booked":0},
{"number":2,"booked":0},
{"number":3,"booked":0},
{"number":4,"booked":1},
{"number":5,"booked":0},
{"number":6,"booked":0},
{"number":7,"booked":0},
{"number":8,"booked":0}
]
Выберите запрос:
SELECT
COUNT(JSON_VALUE(jsonInfo,'$.booked'))
OVER(PARTITION BY JSON_VALUE(jsonInfo,'$.booked'))
FROM table
GROUP BY JSON_VALUE(jsonInfo,'$.booked')
ORDER BY JSON_VALUE(jsonInfo,'$.booked')