SQL - 选择一行中的最大值

Joh*_*han 6 sql ssms max

我似乎被困在这个问题上,环顾四周找不到解决方案。

我有一个 SQL 表,第一行看起来像这样:

Name   Val1   Val2   Val3
John   1000   2000   3000
Run Code Online (Sandbox Code Playgroud)

我需要做的是选择该行中的最大值,即3000

显然,如果这些值位于列而不是行中,您可以使用它SELECT MAX(column) FROM table来获取列中的最大值。是否有与此等效的方法来查找一行中的最大值?

我还查看了PIVOT和的用法UNPIVOT,但我认为它们对我没有用。

我能够做到这一点的唯一方法是创建一个临时表并将每个值插入到单个列中,如下所示:

CREATE TABLE #temp (colvals float)
     INSERT INTO #temp (colvals)
          SELECT Val1 FROM table WHERE ID=1
         UNION
          SELECT Val2 FROM table WHERE ID=1
         UNION
          SELECT Val3 FROM table WHERE ID=1
--------------------------------------------
SELECT MAX(colvals) FROM #temp
--------------------------------------------
DROP TABLE #temp
Run Code Online (Sandbox Code Playgroud)

然而,我觉得这相当慢,特别是因为我的表的列比上面显示的片段多得多。

有任何想法吗?

提前致谢。

Eri*_*ric 3

APPLY您可以通过并使用本机为列构建参考表MAX()

-- Sample Data
declare @data table (Name varchar(10), Val1 int, Val2 int, Val3 int, Val4 int, Val5 int, Val6 int)
insert @data values 
    ('John', 1000, 2000, 3000, 4000, 5000, 6000),
    ('Mary', 1, 2, 3, 4, 5, 6)


select Name, MaxValue from 
    @data 
    cross apply 
    (
        select max(value) as MaxValue 
        from 
            (values
                (Val1),(Val2),(Val3),(Val4),(Val5),(Val6) -- Append here
            ) t(value)
    ) result
Run Code Online (Sandbox Code Playgroud)

SQL小提琴