SQL中一组100列的每行最大值

时间:2011-04-04 20:15:16

标签: sql return-value row max

虽然我已经看到了这个问题的几个答案,但所有这些答案都倾向于依靠最强大的功能而不断回归

“Msg 195,Level 15,State 10,Line 1 “GREATEST”不是公认的内置函数名称。“

我想知道一种构建查询的方法,该查询为每一行返回工件ID,并且该行中的最大值以及它所在的列。任何建议都是受欢迎的。我已经看过这个板子和其他人的一些例子,但是他们会在各种错误中保持不变。

尝试和失败的代码,缩短了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 

谢谢!

1 个答案:

答案 0 :(得分: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