我有一张桌子:

  BP1             BP2
 -----------------------------
 140              80
 153              88
 90               162
 98               214
 98               69

我想把它组织成两列:一列是高BP,另一列是低BP:

预期输出:

BP_High        BP_Low
---------------------------------
140             80
153             88
162             90
214             98
98              69

*所有值均为int

我试过了:

 SELECT CASE WHEN BP1 > BP2 THEN BP1
             WHEN BP1 < BP2 THEN BP2 END BP_High,
        CASE WHEN BP1 > BP2 THEN BP2
             WHEN BP1 < BP2 THEN BP1 END BP_Low 
FROM Table

它不起作用……它让我把一切都搞混了:

BP_High        BP_Low
---------------------------------
140             80
153             88
90             162
98             214
98              69

我也试过了:

 SELECT CASE WHEN BP1 > BP2 THEN BP1
             ELSE BP2 END BP_High,
        CASE WHEN BP1 > BP2 THEN BP2
             ELSE BP1 END BP_Low
 FROM Table 

除了大小写以外,是否还有其他方法可以从2列中获得最高/最低值?

推荐答案

你的第三次try 几乎是正确的,实际上你可以在这里使用CASE个表达式:

SELECT
    CASE WHEN BP1 > BP2 THEN BP1 ELSE BP2 END AS BP_High,
    CASE WHEN BP1 < BP2 THEN BP1 ELSE BP2 END AS BP_Low
FROM yourTable;

在其他数据库上,如MySQL、Postgres或SQLite,有LEAST()GREATEST()个标量函数可用.在这些数据库上,您的查询可以简化为:

SELECT
    GREATEST(BP1, BP2) AS BP_High,
    LEAST(BP1, BP2) AS BP_Low
FROM yourTable;

Sql相关问答推荐

Postgresql -如何计算刷卡和刷卡时间

如何并行SELECT和RESET?

从2个表中查找每条记录的唯一最接近的日期匹配

在多个联合中使用相同的SELECT SQL查询

转换表中的数据

如何根据计数和分组获取订单总数

从原始表列中经过JSON字符串化的对象数组构建视图

根据最大值为字母数字大小写分配数值

WooCommerce产品的SQL查询:获取sku和产品标签

在SQL查询中查找客户端的最短日期比较列和多行

获取分布在同一行的列中的出现次数

如何在android房间中进行多个加入

根据具有特定值的 ID 创建自定义组

PostgreSQL:通过数组的元素从另一个表中 Select 数据,然后按顺序显示

在多个表上递归查找

连续期间的缺口

在 postgresql 中,我可以将其组合成一个查询吗?

为什么 Oracle 在一个查询中对同一张表同时执行 TABLE SCAN 和 INDEX UNIQUE SCAN?

如果当前日期是一周中的某一天,则从另一天提取结果

Select 随机行,使得列子组的组合是唯一的