У меня есть поле json со значениями:
[{"elementId": "1", "name": "foo", "value": "A"}, {"elementId": "2", "name": "bar", "value": "B"}, {"elementId": "3", "name": "foobar", "value": "C"}, {"elementId": "4", "name": "barfoo", "value": "D"}]
Итак, мой набор данных будет выглядеть так:
user_id | form_data
---------------------------------------------
101 | [{"elementId": "1", "name": "foo", "value": "A"}, {"elementId": "2", "name": "bar", "value": "B"}, {"elementId": "3", "name": "foobar", "value": "C"}, {"elementId": "4", "name": "barfoo", "value": "D"}]
102 | [{"elementId": "1", "name": "crash", "value": "A"}, {"elementId": "2", "name": "bang", "value": "B"}, {"elementId": "3", "name": "wallop", "value": "C"}]
Я хотел бы извлечь значения имени из списка, чтобы в качестве вывода у меня был столбец списка, разделенный запятыми:
user_id | names
----------------------------
101 | foo,bar,foobar,barfoo
102 | crash,bang,wallop
Список может быть разной длины, поэтому мой текущий подход (ниже) не будет работать с более длинными формами:
SELECT a || ',' || b || ',' || c || ',' || d
FROM (select f.form_data
,JSON_EXTRACT_PATH_TEXT(json_extract_array_element_text (f.form_data,0),'name') a
,JSON_EXTRACT_PATH_TEXT(json_extract_array_element_text (f.form_data,1),'name') b
,JSON_EXTRACT_PATH_TEXT(json_extract_array_element_text (f.form_data,2),'name') c
,JSON_EXTRACT_PATH_TEXT(json_extract_array_element_text (f.form_data,3),'name') d
FROM forms f)
Любая помощь будет принята с благодарностью!
Я могу извлечь все значения имени в виде отдельных столбцов, используя приведенное выше, но проблема здесь в том, что я должен ссылаться на каждое индексированное имя позиции, в котором может появиться, и это не масштабируется.
Чего я пытаюсь добиться, так это извлечь все компоненты имени в одну ячейку, не ссылаясь на позицию в массиве.