【问题标题】:Get Least Value in a row连续获得最小值
【发布时间】:2021-06-08 00:41:46
【问题描述】:

我有如下 12 个月的条目,我想获得它的最小值。我有一个想法用CASE 表达式来实现,但它的可读性看起来太复杂了。

表格

   +----------------------------------------------------------------------------+
   | Id | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec |
   +----------------------------------------------------------------------------+
   | 1  | 0.1 | 1   | -2  | -0.5|  3  |  5  |  9  | 1.5 | 2.5 | 3.6 | 3.6 | 2.5 |
   | 2  | 3   | 2   | 5   | 2.5 |  3  |  6  |  10 | 1.1 | 2.8 | 2.6 | 5.6 | 1.8 |
   | 3  | -1  | 1   | 3   | -0.5|  3  |  5  |  9  | 1.5 | 2.5 | 3.6 | 3.6 | 2.5 |
   +----------------------------------------------------------------------------+

预期输出

   +------------------------------------------------------------------------------------+
   | Id | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | Least |
   +------------------------------------------------------------------------------------+
   | 1  | 0.1 | 1   | -2  | -0.5|  3  |  5  |  9  | 1.5 | 2.5 | 3.6 | 3.6 | 2.5 | -2    |
   | 2  | 3   | 2   | 5   | 2.5 |  3  |  6  |  10 | 1.1 | 2.8 | 2.6 | 5.6 | 1.8 | 1.1   |
   | 3  | -1  | 1   | 3   | -0.5|  3  |  5  |  9  | 1.5 | 2.5 | 3.6 | 3.6 | 2.5 | -1    |
   +------------------------------------------------------------------------------------+

我尝试过如下查询,但它的可读性太复杂 - 有什么方法可以更有效地做到这一点?

SELECT Id, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec,
       CASE WHEN Jan< Feb && Jan < Mar && Jan < Apr && Jan < MAY && Jan < Jun && Jan < Jul && Jan < Aug && Jan < Sep && Jan < Oct && Jan < Nov && Jan < Dec THEN Jan
            WHEN Feb < Jan && Feb < Mar && Feb < Apr && Feb < MAY && Feb < Jun && Feb < Jul && Feb < Aug && Feb < Sep && Feb < Oct && Feb < Nov && Feb < Dec THEN Feb
            WHEN...
       END AS Least     
FROM table

【问题讨论】:

    标签: sql sql-server tsql min


    【解决方案1】:

    你可以试试cross apply。见下面的脚本:

    SELECT Id, Jan, Feb, Mar, Apr, May, Jun, Jul ,Aug, Sep, Oct, Nov, Dec, Least
    FROM Test
    CROSS APPLY (SELECT MIN(MinColVal) AS Least FROM (VALUES (Jan),(Feb),(Mar),(Apr),(May),(Jun),(Jul),(Aug),(Sep),(Oct),(Nov),(Dec)) AS a(MinColVal))tab
    

    【讨论】:

    • @VigneshKumarA 。 . .你应该接受这个答案。
    【解决方案2】:

    这应该可以解决问题。

    SELECT ID, MIN(MONTH) AS Least
    FROM
    (
        SELECT JAN AS MONTH
        FROM ##table
        UNION ALL
        SELECT FEB AS MONTH
        FROM ##table
        UNION ALL
        SELECT MAR AS MONTH
        FROM ##table
    ) mon
    GROUP BY ID
    

    【讨论】:

      猜你喜欢
      • 2021-06-05
      • 2018-07-22
      • 1970-01-01
      • 2022-10-24
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      相关资源
      最近更新 更多