2013-04-11 1 views
0

Для этого я использую SQL 2000. Учитывая следующую таблицу:Возвращаемое максимальное значение из нескольких строк/столбцов

F1   D1   D2   D3   LN 
================================================== 
1   1/1   1/1   1/1   1 
1   2/1   1/1   1/1   2 
2   1/1   1/1   1/1   1 
2   1/1   1/1   1/1   2 

Мне нужно получить строки, которые имеют наибольшее значение в D1-D3. Однако, если они все одинаковые, я бы хотел вернуть их всех. Таким образом, результаты из приведенной выше таблицы будут следующими: если строка 2 имеет значение D1 2/1, поэтому мне не нужна строка 1, а значения строк 3 и 4 D все одинаковы, поэтому я хотел бы, чтобы оба из тех.

F1   D1   D2   D3   LN 
================================================== 
1   2/1   1/1   1/1   2 
2   1/1   1/1   1/1   1 
2   1/1   1/1   1/1   2 

спасибо.

+0

Добро пожаловать в StackOverflow! Чтобы получить положительный ответ здесь, пожалуйста, покажите, что вы пробовали. –

+0

Вы можете сделать это с тремя подзапросами в вашем предложении 'WHEN', каждый из которых вычисляет максимум отдельных столбцов. Собственно, как вы ** сравниваете ** свои столбцы D *? –

ответ

0

Данные вы предоставили недостаточно для решения, но вы можете попробовать это:

create view T1 as 
(
select F1, MAX(D1) D1, MAX(D2) D2, MAX(D3) D3 
from table_3 
group by F1 
); 
go 

select * 
from table_3 a inner join t1 b 
on 
a.F1 = b.F1 and a.D1 = b.D1 and a.D2 = b.D2 and a.D3 = b.d3; 

И это

select * 
from Table_3 a 
where exists 
(
    select F1, MAX(D1) D1, MAX(D2) D2, MAX(D3) D3 
    from table_3 b 
    group by F1 
    having a.F1 = b.F1 and a.D1 = MAX(b.D1) and a.D2 = MAX(b.D2) and a.D3 = MAX(b.d3) 
)