Например, у нас есть таблица, содержащая данные обычного поля и данные JSON.
IDa Details
a [{"value":"1","idType":"ID"},{"value":"123","idType":"StudentID"},{"value":"777","idType":"NotRequired"}]
b [{"value":"2","idType":"ID"},{"value":"111","idType":"StudentID"},{"value":"234","idType":"EmpID"}]
c [{"value":"3","idType":"ID"},{"value":"222","idType":"StudentID"},{"value":"333","idType":"StudentID"},{"value":"444","idType":"StudentID"},{"value":"345","idType":"EmpID"}]
Я хочу получить таблицу, которая будет выглядеть ниже
IDa ID StudentID EmpID
a 1 123 null
b 2 111 234
c 3 222 345
c 3 333 345
c 3 444 345
В Impala ранее я придумал Case when...then
, но он даст много нулевых значений для некоторой ячейки.
Позже также придумали max(case when...then..)
, здесь будет пропущен какой-то другой идентификатор студента для того же идентификатора
select
IDa,
max(case when p.idType='ID' then p.value end) as ID,
max(case when p.idType='StudentID' then p.value end) as StudentID,
max(case when p.idType='EmpID' then p.value end) as EmpID
from table, table.Details p
group by IDa
Но этот метод выберет самый большой StudentID для ID2, я хочу показать всю необходимую информацию.