2012-05-24 6 views
2

Образец таблицы: MyTable1SQL получить максимальное значение столбца для каждой строки

Col1 | Col2  |  Col3 
    3   10   5 
    10   9    40 
    1   2    6 

Выход должен быть:

NewColumn 
    10 
    40 
    6 

Как вы можете видеть, мне просто нужно, чтобы получить наибольшее значение из каждой строки ..

Возможно ли это путем использования запроса на выбор sql?

Заранее спасибо

ответ

2

Вам нужно будет использовать функцию MS Access IIF()

IIF(condition, valueiftrue, valueiffalse) 

состояние это значение, которое вы хотите проверить.

valueiftrue - это значение, которое возвращается, если условие принимает значение ИСТИНА.

valueiffalse - это значение, которое возвращается, если условие принимает значение FALSE.

так что ваш запрос будет

SELECT IIf(C12 > Col3, C12, Col3) as newColumn 
FROM 
(
    select IIF(Col1 > Col2, Col1, Col2) as C12, Col3 
    from mytable1 
) x 
+0

+1 но вы могли бы просто вложить IIF друг в друга. Или MS Access запрещает этот вид гнездования? –

+1

@AndriyM Да, вы можете вложить IIF, и я изначально написал это так, но я подумал, что это легче читать. – Taryn

+0

Собственно, то, что я имел в виду, было неправильным, потому что я (dis) пропустил 'C12' в этом состоянии и думал, что вам нужно будет заменить * только *' TRUE'-term 'C12'. Вы совершенно правы, что решили написать ИИФ, как это. –

0

Интересно, если это будет работать в MS Access (не может проверить себя, я боюсь):

SELECT 
    (
    SELECT MAX(Col) 
    FROM (
     SELECT Col1 AS Col UNION ALL 
     SELECT Col2  UNION ALL 
     SELECT Col3 
    ) s 
) AS NewColumn 
FROM yourtable 

Это работает в другой семейство продуктов баз данных того же поставщика, поэтому я подумал, что они могут просто добавить поддержку этого в MS Access.

0

Пример, который работает:

Table1:

Col - Text 
Col1 - Number 
Col2 - Number 
Col3 - Number 
Col4 - Number 

данных:

col; col1; col2; col3; col4; 
a;  1; 4; 6; 7; 
b;  3; 66; 23; 235; 
c;  34; 634; 11; 23; 

Запрос:

SELECT Col, Max(colx) AS MaxOfColx 
FROM 
(
SELECT Col, Col1 AS Colx From Table1 UNION ALL 
SELECT Col, Col2 AS Colx From Table1 UNION ALL 
SELECT Col, Col3 AS Colx From Table1 UNION ALL 
SELECT Col, Col4 AS Colx From Table1 
) 
group by Col 

Результат:

Col; MaxOfColx 
a;   7 
b;  235 
c;  634 

Это будет работать столько столбцов, сколько вам нужно.

+0

Pro tip: используйте удобные функции форматирования кода при ответе на вопрос, и вам не нужно писать HTML самостоятельно. Также обратите внимание, что уже есть принятый ответ :) – fancyPants

Смежные вопросы