PostgreSQL从两个创建一行

时间:2019-02-08 12:13:36

标签: postgresql

我有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的新手,现在我被困住了。

1 个答案:

答案 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。