У меня есть исходная таблица с данными в формате VARCHAR, как в примере ниже.
Я хочу вставить данные в другую таблицу в формате JSON (сам столбец результата может иметь тип JSON или VARCHAR).
- Для каждого идентификатора существует как минимум 1 пара JSONName / JSONValue.
- Но у каждого идентификатора нет одинаковых видов и количества пар JSONName / JSONValue.
- Каждый идентификатор может содержать до 50 пар JSONName / JSONValue.
- Порядок пар в значении столбца ResultJSON не имеет значения.
SourceTable:
____________________________
| Id | JSONName | JSONValue |
|____|__________|___________|
| 1 | Name | John |
| 2 | Name | Henry |
| 2 | Age | 32 |
| 3 | Age | 56 |
| 3 | Location | US |
| 4 | Age | 24 |
| 4 | Name | Andrew |
| 4 | Location | |
Что я хочу:
Expected ResultTable:
____________________________________________________
| Id | ResultJSON |
|____|______________________________________________|
| 1 | {"Name":"John"} |
| 2 | {"Name":"Henry","Age":"32"} |
| 3 | {"Age":"56", "Location":"US"} |
| 4 | {"Age":"24","Name":"Andrew","Location":null} |
Что я получу с моим текущим запросом:
Wrong resultTable:
_______________________________________________________________________________________________________________________________
| Id | ResultJSON |
|____|_________________________________________________________________________________________________________________________|
| 1 | [{"JSONName":"Name","JSONValue":"John"}] |
| 2 | [{"JSONName":"Name","JSONValue":"Henry"},{"JSONName":"Age","JSONValue":"32"}] |
| 3 | [{"JSONName":"Age","JSONValue":"56"},{"JSONName":"Location","JSONValue":"US"}] |
| 4 | [{"JSONName":"Age","JSONValue":"24"},{"JSONName":"Name","JSONValue":"Andrew"},{"JSONName":"Location","JSONValue":null}] |
Текущий запрос:
INSERT INTO ResultTable
(
Id
,ResultJSON
)
SELECT
SourceTable.Id
,JSON_AGG(SourceTable.JSONName,SourceTable.JSONValue)
FROM SourceTable
INNER JOIN OtherTable ON SourceTable.Id=OtherTable.Id
Возможно ли это сделать с помощью функций Teradata JSON? Если нет, то какой запрос будет наиболее оптимизирован для этого?