我有两个包含以下内容的PostgreSQL表:
例如:
|---ID---|---NAME---|
| 1 | name1 |
| 2 | name2 |
| 3 | name3 |
|---ID_OBJ---|---TYPE---|---VALUE---|
| 1 | type_1 | val1 |
| 1 | type_2 | val2 |
| 2 | type_1 | val3 |
| 3 | type_2 | val4 |
我想在一行中获取有关每个对象的所有信息。问题是我也想要不存在的行的值:
|---NAME---|---TYPE1---|---TYPE2---|
| name1 | val1 | val1 |
| name2 | val3 | NA |
| name3 | NA | val4 |
我真的不明白如何继续获得这种无关系的关系。 EXISTS
关键字是解决方案吗?
编辑:我无法激活tablefunc扩展程序,因为我自己无法管理服务器,因此解决方案解释here无法轻松使用。
答案 0 :(得分:2)
虽然Postgres支持crosstab
,但我认为如果您知道所需的列,可以使用条件聚合轻松完成:
select t1.name,
coalesce(max(case when type = 'type_1' then value end), 'NA') as type_1,
coalesce(max(case when type = 'type_2' then value end), 'NA') as type_2
from t1 left join
t2
on t1.id = t2.id_obj
group by t1.name;