SQL-запрос для ограничения количества строк, имеющих разные значения - PullRequest
0 голосов
/ 02 февраля 2011

Есть ли в SQL способ использовать запрос, эквивалентный следующему:

select * from table1, table2 where some_join_condition
and some_other_condition and count(distinct(table1.id)) < some_number;

Допустим, table1 - это таблица сотрудников.Тогда объединение приведет к тому, что данные об одном сотруднике будут распределены по нескольким строкам.Я хочу ограничить количество отдельных сотрудников, возвращаемых некоторым числом.Условие для номера строки или чего-то подобного в этом случае будет недостаточным.

Так каков наилучший способ получить тот же эффект, что и в предыдущем запросе?

Ответы [ 3 ]

1 голос
/ 02 февраля 2011

Это будет работать почти для всех БД

SELECT * 
FROM table1 t1
INNER JOIN  table2 t2
ON some_join_condition
   AND some_other_condition 
INNER JOIN ( 
    SELECT t1.id
    FROM table1 t1
    HAVING 
        count(t1.ID) > someNumber
    ) on t1.id = t1.id

Некоторые БД имеют специальный синтаксис, чтобы сделать это немного проще.

1 голос
/ 02 февраля 2011
select *
from (select * from employee where rownum < some_number and some_id_filter), table2
where some_join_condition and some_other_condition;
0 голосов
/ 02 февраля 2011

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

См. Пример: http://msdn.microsoft.com/en-us/library/ms176102.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...