sql - Postgres : SELECT column name based on Boolean value

标签 sql postgresql select

我有一个包含出行方式 bool 值的表格,如下所示:

SELECT * FROM survey;
+----+-------+-------+-------+-------+
| id | bike  |  car  |  bus  | metro |
+----+-------+-------+-------+-------+
| 49 | false | false | true  | false |
| 51 | false | true  | false | false |
| 52 | false | false | false | true  |
| 53 | false | true  | false | false |
+----+-------+-------+-------+-------+

然后我只想选择值为 true 的模式,因此最终结果是:

+----+-------+
| id | mode  |
+----+-------+
| 49 | bus   |
| 51 | car   |
| 52 | metro |
| 53 | car   |
+----+-------+

请问我如何实现?

最佳答案

您可以使用 case 表达式:

select
    id,
    case
        when bike  = true then 'bike'
        when car   = true then 'car'
        when bus   = true then 'bus'
        when metro = true then 'metro'
    end mode
from survey

假设对于每一行,只有一列为真。如果不是,则只返回第一个匹配列的值。

关于sql - Postgres : SELECT column name based on Boolean value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58591079/

相关文章:

oracle - 授予选择 View

linux - 如何让 "select"在单列中显示选项?

php - 如何从mysql中按集合计算每个组的总数

MySQL JOIN 全选

sql - 如何从一列中获取记录,以便与另一列中的值没有关联

postgresql - 具有多个空列的 Postgres 唯一键

c++ - 无法在 MinGW 中链接 libpqxx

mysql - 对具有多个 ID 的行求和

c# - 从 SQL 语句中提取更新列的正则表达式

postgresql - voltDB 或 NuoDB 是否需要 ElasticSearch?