в кусте, как выбрать A, если A не равно нулю, в противном случае выберите B. И A, и B являются полями внутри столбца json - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть таблица улья, где есть два столбца. Первый столбец называется user_id , а второй - event , где данные представлены в формате JSON. Пример таблицы будет выглядеть так:

user_id, event
1231321, {"ts":1554254647,"items":[{"id":12342,"label1":null,"lable2":a},{"id":2,"label1":"c","lable2":"d"}]}
2131232, {"ts":1524254647,"items":[{"id":12433,"label1":null,"lable2":null},{"id":2,"label1":"c","lable2":"d"}]}

Как написать запрос для получения user_id и метки (label1, если lable1 доступен, в противном случае lable2). Используя приведенный выше пример, результат запроса будет:

user_id, lables
1231321, [c,a]
2131232, [c,d]

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

SQL должен быть

выберите случай, когда get_json_object (json_column, '$. Items.label1 [0]') равен нулю, а затем get_json_object (json_column, '$. Items.lable2 [0]'), иначе get_json_object (json_column, '$. Items.label1) [0] ') end as test_data;




select case when  get_json_object('{"ts":1554254647,"items":[{"id":12342,"label1":null,"lable2":"a"},{"id":2,"label1":"c","lable2":"d"}]}','$.items.label1\[0]') is null then get_json_object('{"ts":1554254647,"items":[{"id":12342,"label1":null,"lable2":"a"},{"id":2,"label1":"c","lable2":"d"}]}','$.items.lable2\[0]') else   get_json_object('{"ts":1554254647,"items":[{"id":12342,"label1":null,"lable2":"a"},{"id":2,"label1":"c","lable2":"d"}]}','$.items.label1\[0]')  end as test_data;

+ ------------ + - +

| test_data |

+ ------------ + - +

| c |

+ ------------ + - +

0 голосов
/ 03 апреля 2019

Я не уверен, как работает файл json.Но coalesce или NVL - это функция, которая может удовлетворить ваши требования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...