sql - 如果一列中的值相同,则连接行
问题描述
有一个 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
我想获得描述每个对象的值对。它必须是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';
推荐阅读
- python - 你如何修复 numpy 和 pandas 的“runtimeError: package failed to pass a sanity check”?
- python - 将 Pandas DF 绘制为堆积条形图,同时忽略缺失值
- node.js - 未在 nodejs express 中使用 PUT 编辑数据
- html - 在引导代码中转换 html 和 css 代码
- terraform - Terraform AKS 和对 node_resource_group 的引用
- python - Python 2 错误将我的字符串值替换为 u'intentional/'
- c++ - C++20 非类型模板参数,它是先前类型参数中的模板:不是有效的模板参数,因为不是变量
- unit-testing - How do I properly use channels inside a parallelized Go test?
- mysql - MySQL collate 子句 - 在like 子句之前还是之后?
- python - 错误 zsh:在运行加载 txt 文件的 python 程序时被杀死