2012-05-07 2 views
1

Я пробовал проверить этот вопрос sql - distinct + select и, похоже, не смог его правильно настроить в соответствии с моей ситуацией. Я также не участвую в команде sql dev, поэтому я не знаю всех входов и выходов из базы данных. Я стреляю в темноте здесь, на тестовой БД. Вот псевдо пример моего текущего запроса:Выберите ограниченное количество результатов на основе столбца

select a.name, b.col1, 
from name a, amount b 
where a.identifier=b.acctid 
and b.col1 != 'test' 

Пример того, что в настоящее время возвращаемый запросом:

a.name | b.col1 
Jeff  1 
Jeff  333 
Jeff  77 
Jeff  1 
Jeff  14 
Bob  22 
Bob  4 
Bob  5 
Bob  6 

И я хотел бы для результатов запроса, чтобы вернуть первые п (а номер, который я выбираю), которые уникальны на основе ColA. Например, если п было 2:

a.name | b.col1 
Jeff  1 
Jeff  333 
Bob  22 
Bob  4 
+0

Вы хотите верхнюю часть 2 каждого ColA? Каково название столбца, которое вы будете использовать для его заказа? Пожалуйста, сделайте свой псевдо-запрос, а столбцы результатов будут иметь одинаковые имена столбцов. –

+0

жаль, что я забыл обновить результирующие наборы в соответствии с запросом. – whitewolfpgh

+0

Используете ли вы SQL Server 2005 или выше? –

ответ

3

Для SQL Server 2005+ можно использовать аналитические функции:

DECLARE @n INT 
SET @n = 2 

;WITH CTE AS 
( SELECT a.name, b.col1, b.col2, ROW_NUMBER() OVER(PARTITION BY ColA ORDER BY a.identifier) Corr 
    FROM name a 
    INNER JOIN amount b 
    ON a.identifier = b.acctid 
    WHERE b.col2 != 'test' 
) 
SELECT * 
FROM CTE 
WHERE Corr <= @n 

Я также изменил свой запрос используйте явные объединения.

+0

@TimLehner - Yeap, это так. Я изменился сейчас, спасибо за головы – Lamak

+0

ему не нравится объявление и установка видимо. выдает ошибку: ORA-06550: строка 1, столбец 9: PLS-00103: встречается символ «@», ожидая одно из следующего: – whitewolfpgh

+1

@whitewolfpgh - 'ORA-06550' ?, поэтому вы используете Oracle вместо SQL Сервер, как указано на ваш вопрос ?. В любом случае, эта часть была только для явного 'n' в вашем вопросе, вы можете просто отфильтровать запрос без этой части и изменить' @ n' на нужный вам номер – Lamak

1

Шаг 1:

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

Шаг 2:

Выберите все данные, где новый столбец < п Значение

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