【问题标题】:Get the highest/lowest value from 2 columns从 2 列中获取最高/最低值
【发布时间】:2023-01-10 16:22:19
【问题描述】:

我有这张桌子:

  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

*所有值都是整数

我试过了:

 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 

除了 CASE WHEN 之外,还有其他方法可以从 2 列中获取最高/最低值吗?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您的第三次尝试几乎是正确的,实际上您可以在此处使用 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 Server 2022 supports 两种功能。
    • @Zhorov 是时候了...希望他们也引入一些更好的正则表达式支持:-)
    猜你喜欢
    • 1970-01-01
    • 2013-05-30
    • 2021-03-31
    • 2019-04-23
    • 2013-07-21
    • 2016-06-16
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    相关资源
    最近更新 更多