问题描述
嗨,我想找到表中一行的最大值的列名
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 fuinction
。 IIF() 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