Максимальное значение на строку из набора из 100 столбцов в SQL - PullRequest
2 голосов
/ 05 апреля 2011

Хотя я видел несколько ответов на этот вопрос, все они, как правило, полагаются на величайшую функцию, которая продолжает возвращаться с

"Msg 195, Уровень 15, Состояние 10, Строка 1," БОЛЬШОЙ "не является распознанным именем встроенной функции. "

Я хотел бы знать способ создания запроса, который для каждой строки возвращает идентификатор артефакта и наибольшее значение в строке вместе со столбцом, в котором оно былов. Любые предложения будут приветствоваться.Я просмотрел немало примеров на этой доске и других, но продолжаю разбегаться по различным ошибкам.

Попытка и ошибка кода, сокращено для получения удовольствия:

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 Ответ

3 голосов
/ 05 апреля 2011
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
...