如果一列中的值相同,则加入行
Join rows if the same value in one column
有一个 Postgres 数据库,table 有三列。数据结构在外部系统中,所以我无法修改它。
每个对象由三行表示(由列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
我想获取描述每个对象的值对。它必须是 name
和 status
。
对于这个例子,输出应该是这样的:
exampleNameAAA | active
exampleNameBBB | inactive
exampleNameCCC | inactive
解决这个问题的最佳方法是什么?
您可以使用自联接
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';
有一个 Postgres 数据库,table 有三列。数据结构在外部系统中,所以我无法修改它。
每个对象由三行表示(由列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
我想获取描述每个对象的值对。它必须是 name
和 status
。
对于这个例子,输出应该是这样的:
exampleNameAAA | active
exampleNameBBB | inactive
exampleNameCCC | inactive
解决这个问题的最佳方法是什么?
您可以使用自联接
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';