SELECT
uid,
kv['c1'] AS c1,
kv['c2'] AS c2,
kv['c3'] AS c3
FROM (
SELECT uid, map_agg(key, value) kv
FROM vtable
GROUP BY uid
) t
uid c1 c2 c3
--- -- -- --
101 11 12 13
102 21 22 23
SELECT t1.uid, t2.key, t2.value
FROM htable t1
CROSS JOIN unnest (
array['c1', 'c2', 'c3'],
array[c1, c2, c3]
) t2 (key, value)
uid key value
--- --- -----
101 c1 11
101 c2 12
101 c3 13
102 c1 21
102 c2 22
102 c3 23
your dynamic pivot query:
SELECT uid, kv['c1'] AS c1, kv['c2'] AS c2, kv['c3'] AS c3 FROM ( SELECT uid, map_agg(key, value) kv FROM vtable GROUP BY uid ) t
to make the following part dynamic in query:
kv['c1'] AS c1, kv['c2'] AS c2, kv['c3'] AS c3
.I converted the above query as following:
SELECT uid, (select array_join(transform((select array_agg(distinct column) from vtable), x->format_element(x)), ',' )) FROM ( SELECT uid, map_agg(key, value) kv FROM vtable GROUP BY uid ) t
But the join part is returning string not executeable columns in query. Can anyone guide me what I'm doing wrong.