SQL:确定每行中哪个列的值最大

SQL:确定每行中哪个列的值最大,sql,Sql,我有一个列ID为a、B、C、D、E的表。。。(共10个数字列) 对于每一行,我需要找出哪个列的值最大,以及该值是什么 例如,这是我桌子上的一行: ID A B C D E F G H I J XY5495013217 我想生成两个新列: maxvalue,等于9,以及 maxcol,等于“C” 除了一个庞大的IF语句之外,还有什么建议吗?我手头没有sql处理器,但有一些类似于 select id , colName from (select id, 'A' as colName, a as v

我有一个列ID为a、B、C、D、E的表。。。(共10个数字列)

对于每一行,我需要找出哪个列的值最大,以及该值是什么

例如,这是我桌子上的一行:
ID A B C D E F G H I J

XY5495013217

我想生成两个新列:
maxvalue,等于9,以及 maxcol,等于“C”


除了一个庞大的IF语句之外,还有什么建议吗?

我手头没有sql处理器,但有一些类似于

select id , colName
from 
(select id, 'A' as colName, a as value union all
select id, 'B' as colName, b as value union all
select id, 'C' as colName, c as value union all
select id, 'D' as colName, d as value union all
select id, 'E' as colName, e as value union all
select id, 'F' as colName, f as value union all
select id, 'G' as colName, g as value union all
select id, 'H' as colName, h as value union all
select id, 'I' as colName, i as value union all
select id, 'J' as colName, j as value)
group by id having max(value)

使用
unpivot
的解决方案,假设您的表名为“TestTable”:


当有两个值具有相同的最大值时,重复行是否正常?
WITH unpivoted as 
(
    SELECT * FROM TestTable
    UNPIVOT
    (
        Val FOR Col IN (A, B, C, D, E, F, G, H, I, J)
    ) as u
),
maxvals as (
    SELECT ID, max(val) as MaxVal 
    FROM unpivoted
    GROUP BY ID
)
SELECT
    TestTable.*, 
    MaxVals.MaxVal, 
    (SELECT top 1 Col 
     FROM unpivoted 
     WHERE unpivoted.Id = TestTable.ID and Val = MaxVals.MaxVal) as MaxCol
FROM
    TestTable
    JOIN maxvals on maxvals.id = TestTable.Id