我有一个表 - NS_Data
ns | tid | 资源 | 尼德 |
---|---|---|---|
PQR | ITKT20254 | 不包括 | A |
PQR | ITKT20223 | 不包括 | A |
PQR | ABCD23456 | 不包括 | B |
PQR | ABCD54321 | 不包括 | B |
PQR | ITKT21111 | 包括 | A |
我想要以下格式的输出
ns | 尼德 | 最终地图 |
---|---|---|
PQR | A | [{tid=[ITKT20254, ITKT20223],res=不包含}, {tid=[ITKT21111],res=包含}] |
PQR | B | [{tid=[ABCD23456, ABCD54321], res=不包括}] |
我想要finalMap的类型 数组(行(tid 数组(varchar),res varchar))。我用 json 得到了结果,但与预期的 array(row(tid array(varchar), res varchar)) 格式不兼容。
如果结果行类型中的列顺序并不重要,那么您可以使用
multimap_agg
并在其后使用 map_entries
进行一些转换:
-- sample data
WITH dataset(ns, tid, res, nid) AS
(
values ('PQR', 'ITKT20254', 'not include', 'A'),
('PQR', 'ITKT20223', 'not include', 'A'),
('PQR', 'ABCD23456', 'not include', 'B'),
('PQR', 'ABCD54321', 'not include', 'B'),
('PQR', 'ITKT21111', 'include', 'A')
)
-- query
select ns, nid,
cast(map_entries(multimap_agg(res, tid)) as array(row(res varchar, tid array(varchar))))
as finalMap
from dataset
group by ns, nid;
输出:
ns | 尼德 | 最终地图 |
---|---|---|
PQR | A | [{res=不包括,tid=[ITKT20254,ITKT20223]},{res=包括,tid=[ITKT21111]}] |
PQR | B | [{res=不包括, tid=[ABCD23456, ABCD54321]}] |
如果顺序是固定的,那么您将需要添加额外的步骤来重新排序行中的列。