2015-02-20 2 views
2

У меня есть часть кода, которая возвращает 90-й процентиль группы данных, и я пытаюсь изменить код, чтобы вернуть другие процентили (25, 50, 75). Вот код, который возвращает 90-й процентиль (без интерполяции) успешно:Возвращение множества процентилей в SQL

SELECT Max ([Subquery]![RECP]) AS RECP90P 
FROM (SELECT TOP 90 PERCENT [RECP] FROM [CompData Query] ORDER BY [RECP] DESC) AS Subquery; 

Мое мышление является то, что если я изменить код к следующему, я смог бы вернуть 25-процентиль, например. Вот что я пытался:

SELECT Min ([Subquery]![RECP]) AS RECP25P 
FROM (SELECT TOP 75 PERCENT [RECP] FROM [CompData Query] ORDER BY [RECP] DESC) AS Subquery; 

Я знаю, что не существует в SQL нет SELECT BOTTOM поэтому я пытался вернуть обратное с помощью MIN. Однако, когда я пытаюсь запустить этот код, я возвращаю пустое значение. Я попытался изменить DESC на ASC, думая, что возможно MIN возвращает значение, а не минимум всех значений, но даже это возвращает пустое значение. Кто-нибудь может объяснить, где я ошибаюсь?

Будет что-то вроде этой работы вместо этого?

SELECT Max([CompData Query]![AgedSalary]) CASE ([CompData Query]![Code]) WHEN "RECP" AS RECP90P 
FROM (SELECT TOP 90 PERCENT [AgedSalary] FROM [CompData Query] ORDER BY [RECP] DESC) AS Subquery; 

ли вы быть в состоянии объяснить, почему это CASE WHEN неправильно и/или отсутствует в `Оператор ':

SELECT CASE ([CompData Query]![Code]) WHEN "RECP" THEN SELECT Max([CompData Query]![AgedSalary]) AS RECP90P FROM (SELECT TOP 90 PERCENT [AgedSalary] FROM [CompData Query] ORDER BY [AgedSalary] DESC) ELSE 'Unknown' END; 

Спасибо.

+0

'RECP' имеет пустые значения в столбце. Вот почему вы получаете их с помощью 'MIN()'. –

+0

Вы знаете, как исключить пустые значения в выражении? – Chris2015

+1

Я думаю, мне, вероятно, нужно использовать CASE WHEN в SQL, чтобы исключить пробелы – Chris2015

ответ

1

Я думаю, что Access имеет функцию TRIM(), но любые LTRIM, RTRIM и TRIM должны делать то, что вы хотите.

SELECT Min ([Subquery]![RECP]) AS RECP25P 
FROM (
    SELECT TOP 75 PERCENT [RECP] 
    FROM [CompData Query] 
    WHERE RTRIM([RECP]) <> '' 
    ORDER BY [RECP] DESC 
) AS Subquery; 
Смежные вопросы