我有一個列ID爲A,B,C,D,E ...的表(共10個數字列)SQL:確定哪一列在每一行中具有最大值
對於每一行,I需要找到哪個列具有最大值,以及該值是多少。
E.G.這裏是1排我的表:
ID A B C D E F G H I J
XY 5 4 9 5 0 1 3 2 1 7
我要生成2個新列:
MAXVALUE,這將等於9,和 MAXCOL,這將等於 「C」
任何意見,除了大量的IF聲明?
我有一個列ID爲A,B,C,D,E ...的表(共10個數字列)SQL:確定哪一列在每一行中具有最大值
對於每一行,I需要找到哪個列具有最大值,以及該值是多少。
E.G.這裏是1排我的表:
ID A B C D E F G H I J
XY 5 4 9 5 0 1 3 2 1 7
我要生成2個新列:
MAXVALUE,這將等於9,和 MAXCOL,這將等於 「C」
任何意見,除了大量的IF聲明?
我沒有一個SQL處理器手的事,但沿着使用unpivot
假設你的表格中的解決方案被命名爲「TestTable的」中的
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)
線:
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
重複行確定何時有兩個具有相同最大值的值? – RedFilter 2010-10-06 17:22:18