SQL-如何获得多列的最大值,但我只有一行

SQL-如何获得多列的最大值,但我只有一行,sql,max,sql-order-by,union,Sql,Max,Sql Order By,Union,我正在尝试只获取一行(多列)的最大值。我看过的所有教程都是针对多行的 如何返回最大值(4943)? 谢谢 AFAIK SQL Server(屏幕截图看起来像SMS,如果您使用的是SQL Server,请在问题中添加SQL Server标记,或者您实际使用的DBMS的标记)没有此功能。您需要编写自己的函数或使用案例。。。结束类似于: SELECT CASE WHEN pop_under >= pop_10_to AND pop_under >

我正在尝试只获取一行(多列)的最大值。我看过的所有教程都是针对多行的

如何返回最大值(4943)? 谢谢

AFAIK SQL Server(屏幕截图看起来像SMS,如果您使用的是SQL Server,请在问题中添加SQL Server标记,或者您实际使用的DBMS的标记)没有此功能。您需要编写自己的函数或使用
案例。。。结束
类似于:

SELECT CASE
         WHEN pop_under >= pop_10_to
              AND pop_under >= pop_20_to
              ...
              AND pop_under >= pop_80_p
           THEN pop_under
         WHEN pop_10_to >= pop_under
              AND pop_10_to >= pop_20_to
              ...
              AND pop_10_to >= pop_80_p
           THEN pop_10_to
         ...
         WHEN pop_80_p >= pop_under
              AND pop_80_p >= pop_10_to
              ...
              AND pop_80_p >= pop_70_to
           THEN pop_80_p
        END greatest
      FROM elbat;

(可以并且可能应该在这里和那里进行改进(例如,处理
NULL
s),这只是为了演示这个想法。)

显然,如果可能,应该将该表规范化为一个更合适的结构,在该结构中不会出现此问题,例如

CREATE TABLE Test
(
   [Id] INT IDENTITY(1, 1)
   [Pop] INT,
   [From] INT,
   [To] INT
)
这将使解决方案变得微不足道

然而,使用当前的结构,我们可以通过使用操作符来解决这个问题。假设上面的表名为
test
,并且有4列类型类似的表名为
p1、p2、p3、p4
。 然后,下面的查询将完成请求

SELECT MAX(pop) 
FROM (SELECT * FROM test WHERE Id = [InsertIdHere]) AS TableFilteredToDesiredOneRow
UNPIVOT
(
    pop
    FOR ThePs IN (p1, p2, p3, p4)
) AS U
这消除了对任何容易出现bug的大型条件块的访问需求