2010-10-06 7 views
6

मैं कॉलम आईडी, ए, बी, सी, डी, ई के साथ एक मेज ... (सभी में 10 सांख्यिक स्तंभ)एसक्यूएल: पहचान करना जो स्तंभ प्रत्येक पंक्ति में सबसे बड़ा महत्व है

प्रत्येक पंक्ति के लिए, मेरे पास है यह जानने की आवश्यकता है कि कौन से कॉलम का सबसे बड़ा मूल्य है, और वह मूल्य क्या है।

ईजी। यहाँ मेरी मेज के 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 है, जो बराबर हैं 'सी'

किसी भी सलाह , एक विशाल IF कथन से परे?

+1

डुप्लीकेट पंक्तियों हैं ठीक है जब एक ही अधिकतम मूल्य के साथ दो मान हैं? – RedFilter

उत्तर

1

मैं हाथ एक एसक्यूएल प्रोसेसर, लेकिन

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

की तर्ज अपनी मेज संभालने 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 
संबंधित मुद्दे