如果在一列中具有相同的值,则连接行

时间:2018-10-31 09:51:46

标签: sql postgresql entity-attribute-value

有一个Postgres数据库,该表有三列。数据结构在外部系统中,所以我无法对其进行修改。

每个对象都由三行表示(由列element_id标识-该列中具有相同值的行表示同一对象),例如:

key     value            element_id
-----------------------------------
status  active           1
name    exampleNameAAA   1
city    exampleCityAAA   1
status  inactive         2
name    exampleNameBBB   2
city    exampleCityBBB   2
status  inactive         3
name    exampleNameCCC   3
city    exampleCityCCC   3

我想获取描述每个对象的值对。它必须是namestatus

对于此示例,输出应类似于:

exampleNameAAA   | active
exampleNameBBB   | inactive
exampleNameCCC   | inactive

解决此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用自加入

select a.value as name,
       b.value as status
from the_table a 
  join the_table b 
    on a.element_id = b.element_id 
   and b."key" = 'status'
where a."key" = 'name';

在线示例:https://rextester.com/NPJ5782