Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / FOR JSON запрос - вывод dictionary / 12 сообщений из 12, страница 1 из 1
03.06.2019, 17:36
    #39821864
Yuri Abele
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FOR JSON запрос - вывод dictionary
всем привет!

Есть ли возможность средствами FOR JSON сформировать JSON в виде dictionary, где значение поля используется для формирования имени свойтва JS-объекта?

Т.е. из такой таблицы:
ParentIdPropNamePropValue1Aaa1111Bbb2221Ccc3331Ddd4442Xxx4442Yyy555

получить такой JSON:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
[
  {
    "ParentId":1,
    "Aaa":111,
    "Bbb":222,
    "Ccc":333,
    "Ddd":444
  },
  {
    "ParentId":2,
    "Xxx":333,
    "Yyy":444
  }
]



Я понимаю, что можно отдельные тексты для свойств сформировать "руками" и потом соединить через STRING_AGG, но возможно ли такое средствами FOR JSON?
...
Рейтинг: 0 / 0
03.06.2019, 17:38
    #39821865
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FOR JSON запрос - вывод dictionary
...
Рейтинг: 0 / 0
03.06.2019, 17:48
    #39821869
Yuri Abele
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FOR JSON запрос - вывод dictionary
Konst_One,

да, конечно. Но дело в том, что стандартными средствами (а в статье о них речь) мы получим такой JSON:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
[
  {
    "ParentId":1,
    "PropName":"Aaa",
    "PropValue":111
  },
  {
    "ParentId":1,
    "PropName":"Bbb",
    "PropValue":222
  },
  {
    "ParentId":1,
    "PropName":"Ccc",
    "PropValue":333
  }
  // и т.д.
]



а надо так:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
[
  {
    "ParentId":1,
    "Aaa":111,
    "Bbb":222,
    "Ccc":333,
    "Ddd":444
  },
  {
    "ParentId":2,
    "Xxx":333,
    "Yyy":444
  }
]
...
Рейтинг: 0 / 0
03.06.2019, 17:52
    #39821873
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FOR JSON запрос - вывод dictionary
так вам сначала надо подготовить вашу таблицу правильно, а то у вас EAV по сути
...
Рейтинг: 0 / 0
03.06.2019, 17:56
    #39821876
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FOR JSON запрос - вывод dictionary
Код: sql
1.
select * from table1 where ParentId =1 for json path



правильно сделает?
...
Рейтинг: 0 / 0
03.06.2019, 18:10
    #39821881
Yuri Abele
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FOR JSON запрос - вывод dictionary
Konst_One,

нет, т.к. получится JSON, в котором массив однотипных объектов у которых столбцы переведены в свойства.
А мне надо массив не похожих dictionary-объектов
...
Рейтинг: 0 / 0
03.06.2019, 18:11
    #39821883
Yuri Abele
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FOR JSON запрос - вывод dictionary
вот такое будет:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
[
  {
    "ParentId":1,
    "PropName":"Aaa",
    "PropValue":111
  }
]
...
Рейтинг: 0 / 0
03.06.2019, 18:15
    #39821885
newLoginSql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FOR JSON запрос - вывод dictionary
Вам нужен PIVOT:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
DECLARE @EAV TABLE (ParentID int, PropName varchar(3), PropValue int)

INSERT INTO @EAV([ParentID], [PropName], [PropValue])
VALUES(1, 'Aaa', 111), (1, 'Bbb', 222), (1, 'Ccc', 333)


SELECT * FROM @EAV
PIVOT
(
  MAX(PropValue)  
FOR PropName IN ([Aaa], [Bbb], [Ccc])
)AS T
for json PATH
...
Рейтинг: 0 / 0
04.06.2019, 09:45
    #39822090
Yuri Abele
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FOR JSON запрос - вывод dictionary
newLoginSql,

Спасибо за запрос!
К сожалению не подойдет, т.к. подразумевает, что значения [PropName] заранее известны и их фиксированное количество.
...
Рейтинг: 0 / 0
04.06.2019, 09:53
    #39822097
1C Developer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FOR JSON запрос - вывод dictionary
Yuri AbelenewLoginSql,

Спасибо за запрос!
К сожалению не подойдет, т.к. подразумевает, что значения [PropName] заранее известны и их фиксированное количество.

Почитайте про динамический sql.

Затем заверните скрипт newLoginSql в динамику.
...
Рейтинг: 0 / 0
04.06.2019, 10:49
    #39822139
Yuri Abele
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FOR JSON запрос - вывод dictionary
1C Developer,

спасибо за совет :-)
Но, предроложу, что Вы не до конца вникли в постановку задачи.
Прочитайте, будьте добры, первый постинг
...
Рейтинг: 0 / 0
05.06.2019, 09:39
    #39822635
Yuri Abele
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FOR JSON запрос - вывод dictionary
В общем, стандартными средствами никак.
Пришлось собирать JSON-текст с помощью STRING_AGG самому из кусочков.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / FOR JSON запрос - вывод dictionary / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]