MS Access Pass Through Query найти дубликаты, используя несколько таблиц - PullRequest
1 голос
/ 17 июля 2010

Я пытаюсь найти все cover_set_id с более чем одним прикрепленным идентификатором_подключения_объектом summary_attribute (значение = 2004687).Кажется, что запрос работает нормально без частей GROUP BY & HAVING, но как только я добавлю эти строки в (для COUNT), мои результаты будут неверными.Просто пытаюсь получить дубликмент cover_set_id.

Pass-Through Query через базу данных OBDC:

SELECT DISTINCT
    b.coverage_set_id,
    COUNT (b.coverage_set_id) AS "COUNT"

FROM
    coverage_set_detail_view a
    JOIN contracts_by_sub_group_view b ON b.coverage_set_id = a.coverage_set_id
    JOIN request c ON c.request_id = b.request_id

WHERE
    b.valid_from_date BETWEEN to_date('10/01/2010','mm/dd/yyyy')
    AND to_date('12/01/2010','mm/dd/yyyy')
    AND c.request_status = 1463
    AND summary_attribute = 2004687
    AND benefit_id <> 1092333

GROUP BY
    b.coverage_set_id

HAVING
    COUNT (b.coverage_set_id) > 1

Мои результаты выглядят так:

-----------------------
COVERAGE_SET_ID | COUNT
-----------------------
4193706         | 8
4197052         | 8
4193926         | 112
4197078         | 96
4174168         | 8

Я ожидаю всехCOUNTs будет 2. Спасибо.


:: EDIT ::

Решение:

SELECT
c.coverage_set_id AS "COVERAGE SET ID",
c1.description AS "Summary Attribute",
count(d.benefit_id) AS "COUNT"

FROM (
SELECT DISTINCT coverage_set_id

FROM contracts_by_sub_group_view

WHERE
    valid_from_date BETWEEN '01-OCT-2010' AND '01-DEC-2010'
    AND request_id IN (
        SELECT request_id
        FROM  request
        WHERE request_status = 1463)
) a

JOIN coverage_set_master e ON e.coverage_set_id = a.coverage_set_id
JOIN coverage_set_detail c ON c.coverage_set_id = a.coverage_set_id
JOIN benefit_summary d ON d.benefit_id = c.benefit_id
 AND d.coverage_type = e.coverage_type
JOIN codes c1 ON c1.code_id = d.summary_attribute

WHERE
d.summary_attribute IN (2004687, 2004688)
AND summary_structure = 1000217

GROUP BY c.coverage_set_id, c1.description

HAVING COUNT(d.benefit_id) > 1

ORDER BY c.coverage_set_id, c1.description

И это были результаты:

COVERAGE SET ID  |  SUMMARY ATTRIBUTE  |  COUNT
-------------------------------------------------
4174168          |  INPATIENT          |   2
4174172          |  INPATIENT          |   2
4191828          |  INPATIENT          |   2
4191832          |  INPATIENT          |   2
4191833          |  INPATIENT          |   2
4191834          |  INPATIENT          |   2
4191838          |  INPATIENT          |   2
4191842          |  INPATIENT          |   2
4191843          |  INPATIENT          |   2
4191843          |  OUTPATIENT         |   2
4191844          |  INPATIENT          |   2
4191844          |  OUTPATIENT         |   2

1 Ответ

1 голос
/ 17 июля 2010

. В качестве значения HAVING и счетной части SELECT должен быть указан параметр__произведения_интерфейса: выгодный_идентификатор.

Так как выгодный_идентификатор также находится в таблице а, вы можете сделать следующее

SELECT  
    a.coverage_set_id,  
    COUNT (a.benefit_id) AS "COUNT"  

FROM  
    coverage_set_detail_view a  

WHERE  
    a.coverage_set_id in (
        SELECT b.coverage_set_id 
        FROM contracts_by_sub_group_view b
        WHERE b.valid_from_date BETWEEN to_date('10/01/2010','mm/dd/yyyy') AND to_date('12/01/2010','mm/dd/yyyy'))
    AND a.coverage_set_id in (
        SELECT b2.coverage_set_id
        FROM contracts_by_sub_group_view b2
        INNER JOIN request c on c.request_id=b2.request_id
        WHERE c.request_status = 1463)
    AND ?.summary_attribute = 2004687  
    AND a.benefit_id <> 1092333  

GROUP BY  
    a.coverage_set_id  

HAVING  
    COUNT (a.benefit_id) > 1  

Это удаляет увеличение JOIN, которое происходило на FROM, так как эти таблицы не нужны для извлечения покрытия_set_id и выгоды_ид. Единственная оставшаяся потребность в двух других таблицах состоит в том, чтобы отфильтровать данные на основе критериев, которые содержатся в предложении WHERE.

Я не уверен, в какой таблице хранится таблица summary_attribute, но она будет следовать шаблону, аналогичному valid_from_date, request_status или profit_id.

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