powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите написать запрос
12 сообщений из 12, страница 1 из 1
Помогите написать запрос
    #40126197
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день,

У меня есть таблица:
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE MyTable(
	[EntityId] [int] NULL,
	[EndOfMonthDate] [date] NULL,
	[JsonReport] [varchar](max) NULL
) ON [PRIMARY] 




В первом стоблце Id компании, во втором дата конца месяца и в третьем отчет прибыли и потерь в формате json (пример в приложении).
Мне нужно развернуть json и достать оттуда данные для нодов где RowType 3 или 4 и только для Cells[1]. То есть одна запись с приложенным json файлом должна вернуть что-то типа:

EntityId EndOfMonthDate RowType Account Amount
1 11/30/2021 3 NEW BUSINESS FEE FOR SERVICE 2625.66
1 11/30/2021 4 Total 1 New Business Investment 2625.66
1 11/30/2021 3 RECURRING REVENUE ADVISER SERVICE FEE 8352.69
1 11/30/2021 4 Total 3 Recurring Investment 8352.69
1 11/30/2021 3 RECURRING REVENUE RISK 3594.18
1 11/30/2021 4 Total 4 Recurring Insurance 3594.18
1 11/30/2021 3 BANK CHARGES 5.4
1 11/30/2021 3 BOOKS MAGAZINES AND NEWSPAPERS 9
1 11/30/2021 3 OFFICE SUPPLIES & STATIONERY 17.36
1 11/30/2021 3 POSTAGE 0
1 11/30/2021 3 TELEPHONE EXPENSES 46.03
1 11/30/2021 3 TELEPHONE EXPENSES MOBILE PHONES 5.54
1 11/30/2021 4 Total 1 Admin Cost 83.33
...
Рейтинг: 0 / 0
Помогите написать запрос
    #40126198
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В приложении пример того что я пытаюсь достать.
...
Рейтинг: 0 / 0
Помогите написать запрос
    #40126199
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу пардон, в приложении к первому сообщению забыл убрать лишнюю запятую, поэтому json возвращал ошибку при открытии. Исправил в этом приложении.
...
Рейтинг: 0 / 0
Помогите написать запрос
    #40126221
Alex_Va
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roust_m,
Версия MSSQL?
...
Рейтинг: 0 / 0
Помогите написать запрос
    #40126332
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Va
Roust_m,
Версия MSSQL?


2019
...
Рейтинг: 0 / 0
Помогите написать запрос
    #40126349
Alex_Va
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roust_m,

Как вариант - пройтись по всем записям курсором, используя OPENJSON для обработки поля JsonReport и собирая результат в таблицу.
...
Рейтинг: 0 / 0
Помогите написать запрос
    #40126384
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Va
пройтись по всем записям курсором


За такое раздолбайство на работу не берут.
...
Рейтинг: 0 / 0
Помогите написать запрос
    #40126388
Фотография Ken@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222,

Да, не , там клинический случай был.
...
Рейтинг: 0 / 0
Помогите написать запрос
    #40126460
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Alex_Va
пройтись по всем записям курсором


За такое раздолбайство на работу не берут.


Ну можно еще "While" использовать. Есть другие варианты?
...
Рейтинг: 0 / 0
Помогите написать запрос
    #40126466
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сдается мне тут надо JSON_VALUE и OPENJSON(JSON_VALUE)
...
Рейтинг: 0 / 0
Помогите написать запрос
    #40126471
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m,

Как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare @j nvarchar(max) = N'{
  "ToDo": "В эту переменную кладете ваш json"
}';

select 
	json_value(r2.value, '$.RowType') as [RowType],
	json_value(r2.value, '$.Cells[0].Value') as [Account],
	json_value(r2.value, '$.Cells[1].Value') as [Amount]
from openjson(@j, '$.Reports') rep
	cross apply openjson(rep.value, '$.Rows') r
	cross apply openjson(r.value, '$.Rows') r2
where json_value(r2.value, '$.RowType') in (3, 4);


Надеюсь, переписать код с переменной на столбец труда не составит.
...
Рейтинг: 0 / 0
Помогите написать запрос
    #40126495
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor Tiegael
Roust_m,

Как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare @j nvarchar(max) = N'{
  "ToDo": "В эту переменную кладете ваш json"
}';

select 
	json_value(r2.value, '$.RowType') as [RowType],
	json_value(r2.value, '$.Cells[0].Value') as [Account],
	json_value(r2.value, '$.Cells[1].Value') as [Amount]
from openjson(@j, '$.Reports') rep
	cross apply openjson(rep.value, '$.Rows') r
	cross apply openjson(r.value, '$.Rows') r2
where json_value(r2.value, '$.RowType') in (3, 4);


Надеюсь, переписать код с переменной на столбец труда не составит.


Спасибо огромное! Работает отлично.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите написать запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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