【发布时间】:2021-05-09 17:41:17
【问题描述】:
我想获取 MS SQL 中一行的最小值,如下表所示,我的最小值是 4,它将在输出列中打印 4
| Col1 | Col2 | Col3 | Output |
|---|---|---|---|
| 6 | 4 | 5 | 4 |
【问题讨论】:
标签: sql sql-server row min
我想获取 MS SQL 中一行的最小值,如下表所示,我的最小值是 4,它将在输出列中打印 4
| Col1 | Col2 | Col3 | Output |
|---|---|---|---|
| 6 | 4 | 5 | 4 |
【问题讨论】:
标签: sql sql-server row min
您可以使用CROSS APPLY 和MIN,如下所示:
SELECT MIN(x.cols) AS least_ --, MAX(x.cols) AS greatest_
FROM your_table t
CROSS APPLY ( VALUES ( t.col1 ), ( t.col2 ), ( t.col3 ), ( t.col4 )) AS x ( cols );
【讨论】:
GROUP BY t.pkcolumn
使用 CASE 表达式来实现:
DECLARE @T TABLE( COL1 INT ,COL2 INT ,COL3 INT )
Insert into @T Values(6,4,5)
SELECT CASE WHEN COL1 < COL2 AND COL1 < COL3 THEN COL1
WHEN COL2 < COL1 AND COL2 < COL3 THEN COL2
WHEN COL3 < COL1 AND COL3 < COL2 THEN COL3 END
FROM @T
【讨论】:
这里得到了回答: What's the best way to select the minimum value from several columns?
使用CROSS APPLY:
SELECT ID, Col1, Col2, Col3, MinValue
FROM YourTable
CROSS APPLY (SELECT MIN(d) AS MinValue FROM (VALUES (Col1), (Col2), (Col3)) AS a(d)) A
【讨论】:
这也可以使用 nested CASE 表达式来实现,如下所示:
select
Col1,
Col2,
Col3,
Case
When (Col1 > Col2 AND Col1 > Col3 )
Then Col1
else
Case
When (Col2 > Col3)
Then Col2
else
Col3
END
END as Output
from
TableName
【讨论】: