Я не думаю, что вы можете напрямую сгенерировать вывод JSON
с именами ключей переменных ("2019-31-10"
, "2019-30-10"
, ...), используя FOR JSON PATH
или FOR JSON AUTO.
Но если вы используете SQL Server 2017+, вы можете попытаться сгенерировать вывод JSON
с помощью JSON_MODIFY()
, используя выражение для генерации имен ключей переменных:
Таблица:
CREATE TABLE #Data (
ID int,
[Name] varchar(10),
[Date] date
)
INSERT INTO #Data
(ID, [Name], [Date])
VALUES
(1, 'Me', '2019-10-30'),
(2, 'AA', '2019-10-31'),
(3, 'BB', '2019-10-28'),
(4, 'Me', '2019-10-29'),
(5, 'You', '2019-10-30')
Оператор:
DECLARE @json nvarchar(max) = N'{"Name": {}}'
SELECT @json = JSON_MODIFY(
@json,
CONCAT('append $.Name."', d.[Date], '"'),
JSON_QUERY((SELECT [Name] FOR JSON PATH, WITHOUT_ARRAY_WRAPPER))
)
FROM #Data d
ORDER BY d.[Date] DESC
SELECT @json
Результат:
{
"Name":{
"2019-10-31":[
{
"Name":"AA"
}
],
"2019-10-30":[
{
"Name":"Me"
},
{
"Name":"You"
}
],
"2019-10-29":[
{
"Name":"Me"
}
],
"2019-10-28":[
{
"Name":"BB"
}
]
}
}