необходим фильтр доступа - PullRequest
1 голос
/ 04 июля 2011

Вот пример набора данных

-----------------------------------------------------------------------------------------
id   nameid   name        score         diff          include     quantity     grade
---------------------------------------------------------------------------------------

7     0002     MO          10            0                0          25          3
8     0002     MO          18            0                1          25          3
9     0002     MO          20            0                0          25          3
10    0002     MO          14            0                0          17          6
11    0002     MO          100           0                0          17          6
11    0002     MO          100           0                0          17          6

12    0003     MA          10            0                0          12          3 
13    0003     MA          18            0                0          12          3
14    0003     MA          20            0                0          12          3
15    0003     MA          14            0                0          25          6
16    0003     MA          100           0                1          25          6
17    0003     MA          100           0                0          25          6

12    0004     MB          10            0                0          12          3
13    0004     MB          18            0                1          12          3
14    0004     MB          20            0                0          12          3 
15    0004     MB          14            0                0          07          6
16    0004     MB          100           0                1          07          6
17    0004     MB          100           0                0          07          6

У меня есть запрос, который возвращает приведенную выше таблицу.Обратите внимание, что в каждой группе из шести будет по крайней мере одна строка со значением 1 в столбце include.Посмотрите на ref: запрос доступа необходим , но не нужен.

Также для каждой группы из шести есть три строки с grade = 3 и 3 строки с grade = 6.И соответственно, grade 3 и grade 6 имеют одинаковое количество в этой группе.

Что я хочу сделать, это отфильтровать все строки, которые имеют количество менее 15.Тем не менее, я все еще хочу сгруппировать их по 6.

Я хочу удалить «группу», которая имеет оба значения quantity < 15 для классов 3 и 6. Из приведенного выше набора данных я хочу получить следующий результат:

-----------------------------------------------------------------------------------------
id   nameid   name        score         diff          include     quantity     grade
---------------------------------------------------------------------------------------

7     0002     MO          10            0                0          25          3
8     0002     MO          18            0                1          25          3
9     0002     MO          20            0                0          25          3
10    0002     MO          14            0                0          17          6
11    0002     MO          100           0                0          17          6
11    0002     MO          100           0                0          17          6

12    0003     MA          10            0                0          12          3 
13    0003     MA          18            0                0          12          3
14    0003     MA          20            0                0          12          3
15    0003     MA          14            0                0          25          6
16    0003     MA          100           0                1          25          6
17    0003     MA          100           0                0          25          6

Таким образом, если в группе по шесть человек есть include = 1 в любом ряду и либо 3-й, либо 6 quantity > 15, то я хочу всю группу.

1 Ответ

1 голос
/ 04 июля 2011

" Так что, в принципе, если в группе из шести есть = 1 в любом ряду, а количество 3 или 6 в классе> 15, тогда я хочу всю группу. "

Мое предположениеЭтот запрос будет идентифицировать группы имен кандидатов:

SELECT DISTINCT nameid
FROM YourTable
WHERE
    include = 1
    AND quantity > 15
    AND (grade = 3 OR grade = 6);

Если я угадал правильно, вы можете сохранить его как отдельный запрос или использовать его как подзапрос, и INNER присоедините его к YourTable, чтобы ограничить строкивозвращаются только те, где nameid соответствует вашим критериям.Это может выглядеть близко к этому непроверенному оператору SELECT:

SELECT y.id, y.nameid, y.[name], y.score, y.diff, y.include, y.quantity, y.grade
FROM
    YourTable AS y
    INNER JOIN [
        SELECT DISTINCT nameid
        FROM YourTable
        WHERE
            include = 1
            AND quantity > 15
            AND (grade = 3 OR grade = 6)
        ]. AS q
        ON y.nameid = q.nameid
ORDER BY y.nameid;

Редактировать : Добавить индекс по nameid, если у вас его еще нет.

...