同一行中的SQL Server比较

时间:2017-03-13 07:46:02

标签: sql-server

我使用的是Microsoft SQL Server 2014。 我希望在同一行中获得最大数量。

例如,此表就在这里

 ------------------------------------------------------------------------
| Values_A |  Amounts_A  | Values_B |  Amounts_B  | Values_C |  Amounts_C| 
 ------------------------------------------------------------------------
|  5000    |      50     |   3000   |     100     |   1000   |   200     | 
 ------------------------------------------------------------------------

我希望在A或B或C中获得最大值/金额。 在这种情况下,A的值/金额是5000/50 = 100,B的值/金额是3000/100 = 30,C的值/金额是1000/200 = 5,所以我想要100分。

请告诉我。

2 个答案:

答案 0 :(得分:2)

您可以在子查询中使用values简洁地执行此操作:

select 
    (select
        max(val)
        from (values (Values_A/Amounts_A),
                     (Values_B/Amounts_B),
                     (Values_C/Amounts_C)
        ) t (val)
    ) max_val
from your_table;

答案 1 :(得分:0)

SQL Server的MAX()函数旨在从一组记录而不是列中返回列中的最大数字。我认为您的问题中最大的挑战是您的数据跨列分布。一种方法是使用UNION取消忽略此数据,然后只选择最大比率。

WITH cte AS (
    SELECT Values_A / Amounts_A AS ratio
    FROM yourTable
    UNION ALL
    SELECT Values_B / Amounts_B
    FROM yourTable
    UNION ALL
    SELECT Values_C / Amounts_C
    FROM yourTable
)
SELECT MAX(ratio)
FROM cte

这种方法适用于单个记录。如果你的表中有多条记录,那么更难看的方法就是:

WITH cte AS (
    SELECT Values_A / Amounts_A AS A_ratio,
           Values_B / Amounts_B AS B_ratio,
           Values_C / Amounts_C AS C_ratio
    FROM yourTable
)
SELECT CASE WHEN t.A_ratio > t.B_ratio
            THEN CASE WHEN t.A_ratio > t.C_ratio THEN t.A_ratio ELSE t.C_ratio END
            ELSE CASE WHEN t.B_ratio > t.C_ratio THEN t.B_ratio ELSE t.C_ratio END
       END AS max_ratio
FROM cte t