我使用的是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分。
请告诉我。答案 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