我有2行是这样的:
device ip port vlan network
---------------------------------------------
device a ip_address a port_a vlan network
device b ip_address b port_b vlan network
如您所见,两台设备可以共享vlan和网络(点对点网络),而某些设备只能具有一个网络和vlan,而不能与其他任何网络(访问网络)共享
我想要这样的决赛:
device_a;device_b;network;ip_address_a;ip_address_b;port_a;port_b;vlan
我是Postgres的新手,现在我被困住了。
答案 0 :(得分:0)
这应该做:
select string_agg(distinct device,';') ||
';' || string_agg(distinct network,';') ||
';' || string_agg(distinct ip,';') ||
';' || string_agg(distinct port,';') ||
';' || string_agg(distinct vlan,';')
from your_table
这里有一个小例子来说明这种方法:
with dt as (
select 'device_a'::text col1, 'network'::text col2
union all
select 'device_b'::text col1, 'network'::text col2
)
select string_agg(distinct col1,';') ||
';' || string_agg(distinct col2,';')
from dt
编辑:简化了感谢a_horse_with_no_name。