如何在SQL的表格行中找到最大值的列名

问题描述

嗨,我想找到表中一行的最大值的列名

ID       col1  col2  col3
1        15     12    10
2        6      10    3
3        25     50    100
4        150    80    90

上面是我的表结构,我需要的是找到每一行的最大值,然后找到该最大值的列名 例如,在第一行中,最大值是15,现在我想找到第一行的最大值是15,同时我想找到最大值15的列名是col1(15 => col1)

我需要下面的结果

ID       Maxval   colname
1        15       col1
2        10       col2    
3        100      col3    
4        150      col1    

找到最大值和列名后,我必须以上述格式插入另一个临时表中

SELECT ID,(SELECT MAX(LastUpdateDate)
  FROM (VALUES (col1,col2,col3)) AS UpdateDate(LastUpdateDate)) 
 AS LastUpdateDate
FROM TestTable

这是我用来查找表中每一行的最大值的SQL查询,但是在那之后,我才能够插入到临时表中,但我不知道如何查找每一行中最大值的列名。请任何人了解我的问题并帮助我解决此问题。谢谢

解决方法

在SQL Server中,您可以使用apply

select t.*,v.*
from t cross apply
     (select top (1) v.*
      from (values ('col1',col1),('col2',col2),('col3',col3)) v(colname,val)
      order by val desc
     ) v
,

您可以使用IIF fuinctionIIF() function如果条件为TRUE,则返回一个值;如果条件为FALSE,则返回另一个值:

    select ID,IIF(col1>col2 and col1>col3,col1,IIF(col2>col1 and col2>col3,col2,col3))max_val,'col1','col2','col3'))col_nam
      from TestTable