Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / JSON. Блок из другой таблицы + вложенный массив... / 3 сообщений из 3, страница 1 из 1
15.01.2018, 14:26
    #39584431
Santa89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON. Блок из другой таблицы + вложенный массив...
Есть такой вот пример из предыдущего поста, но уже расширенный - добавился справочник автомобилей:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
DECLARE @T TABLE
(
	Name VARCHAR(50),
	Adress VARCHAR(50),
	PhoneType VARCHAR(50),
	PhoneNumber VARCHAR(50)
)

DECLARE @CARS TABLE
(
DriverName VARCHAR(50),
Car VARCHAR(50),
CarType VARCHAR(50)  
)

INSERT INTO @T
SELECT 'Petya','Moscow','Home','25-9-21'
UNION ALL
SELECT 'Petya','Moscow','Mobile','8985-349-00-XX'
UNION ALL
SELECT 'Vasya','Vladivostok','Mobile','8929-585-34-XX'


INSERT INTO @CARS
SELECT 'Petya','Honda','Sedan'
UNION ALL
SELECT 'Vasya', 'Toyota','Hatchback'


SELECT * FROM @T
SELECT * FROM @CARS


SELECT DISTINCT
t1.Name,
t1.Adress,
Cars.Car,
Cars.CarType,
PhoneNumbers.PhoneType,
PhoneNumbers.PhoneNumber
from
@T t1
INNER JOIN @T PhoneNumbers ON t1.Name = PhoneNumbers.Name
INNER JOIN @CARS Cars ON t1.Name = Cars.DriverName
FOR JSON AUTO



Возвращаемый JSON получается не тот который нужен, получилось так, что массив телефонов оказался внутри блока CARS. (см.скриншот)
Как сделать так, чтобы блок CARS показался отдельно и был привязан к атрибутам человека Adress и Name и стоял на их уровне, и не включал бы в себя массив PhoneNumbers ?
...
Рейтинг: 0 / 0
15.01.2018, 14:41
    #39584447
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON. Блок из другой таблицы + вложенный массив...
Santa89,

подзапросами for json, полагаю, так же, как и для xml.
...
Рейтинг: 0 / 0
15.01.2018, 14:44
    #39584452
Santa89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSON. Блок из другой таблицы + вложенный массив...
Да, получилось всё вот таким способом:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SELECT DISTINCT
t1.Name AS [Person.Name],
t1.Adress AS [Person.Adress],
(
	SELECT 
	t2.PhoneType,
	t2.PhoneNumber
	FROM  @T as t2 
	WHERE t2.Name = t1.Name
	FOR JSON PATH
) as [phones],
(
	SELECT 
	t3.Car,
	t3.CarType
	FROM  @CARS as t3 
	WHERE t3.DriverName = t1.Name
	FOR JSON PATH
) as [cars]
FROM
@T t1
FOR JSON PATH
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / JSON. Блок из другой таблицы + вложенный массив... / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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