2011-04-04 48 views
2

儘管我已經看到了這個問題的幾個答案,但他們都傾向於依賴於最大的功能,該功能不斷回來, 15,State 10,Line 1 'GREATEST'不是公認的內置函數名稱。「SQL中100列中每行的最大值

我想知道一種方法來建立一個查詢,爲每一行返回工件編號,以及行中的最大值與它所在的列。任何建議將受到歡迎。我已經瀏覽了這個板子和其他板塊上的很多例子,但是在各種錯誤中保持運行。

嘗試和失敗的代碼,縮短veiwing樂趣:什麼,我想查詢

SELECT artifactID, GREATEST(V0,V1,V2,V3,V4,V5,V6...V98,V99) AS col_value,   
    CASE GREATEST(V0,V1,V2,V3,V4,V5,V6...V98,V99)   
     WHEN V0 THEN '0'   
     WHEN V1 THEN '1'   
     WHEN V2 THEN '2'   
     WHEN V3 THEN '3' 
     ...  
       WHEN V99 THEN '99' 
     END AS col_name 
    FROM dbo.Theta 

實例返回:

ArtifactID GreatestColumnValue ColumnValueCameFrom 
00001   .330     59 
00002   .89     89 
...    
01000   .44      7 

謝謝!

+0

您使用的是什麼RDBMS和版本? – Lamak 2011-04-04 20:22:23

+0

@Lamak - 'dbo.Theta' ...和'Msg,Level' .. SQL Server我猜 – RichardTheKiwi 2011-04-04 20:26:30

+0

/希望你正在使用SQL Server 2005+,否則......需要更長的答案:) – RichardTheKiwi 2011-04-04 21:02:34

回答

3
SELECT t.artifactID, c.col_value, c.col_name 
FROM dbo.Theta t 
OUTER APPLY 
    (SELECT TOP 1 * 
    FROM (
     SELECT '0', V0 UNION ALL 
     SELECT '1', V1 UNION ALL 
     --... 
     SELECT '99', V99) X(col_name,col_value) 
    ORDER BY col_value desc) C 
+0

+1 ,這是一個非常好的答案... – Lamak 2011-04-04 21:00:15

+0

完美的工作!非常感謝你的幫助! – Artina 2011-04-05 12:34:01