2010-10-06 18 views
6

I sütun numarası, A, B, C, D, E, bir tablo ... (10 sayısal tüm sütun) her satır içinSQL: hangi sütunun belirlenmesi Her sırada en büyük değere sahiptir

, var Hangi sütunun en büyük değere sahip olduğunu ve bu değerin ne olduğunu bulmalıyız.

E.G. İşte benim tablonun 1 satır gösterilmektedir:
ID A B C D E F G H I J
Ben 2 yeni sütunlar oluşturmak istediğiniz XY 5 4 9 5 0 1 3 2 1 7

:

Herhangi bir tavsiye "C" eşit olur 9 eşit olur
MAXVALUE, ve maxcol, muazzam bir IF açıklamasının ötesinde?

+1

yinelenen satırlar Are Aynı maksimum değere sahip iki değer olduğunda OK? – RedFilter

cevap

1

Ben senin tablo varsayarak unpivot kullanan bir çözüm "SınamaTablo" adlı

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) 
0

çizgisinde bir sql el işlemci, ama bir şey yoktur:

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 
İlgili konular