2015-09-11 5 views
1

Я пытаюсь присоединиться к двум таблицам. Некоторые рабочие места, как вы увидите ниже, являются дубликатами. Это единственные, с которыми я столкнулся. Когда я присоединяюсь и суммирую премию вместо получения ожидаемого результата в 100 долларов, я вижу 200 долларов. Любые идеи о том, как заставить запрос не размножаться * 2? Благодаря!SQL Join Duplicate records

Tbl

ABC123  2015-02-27  1  QQ123 
ABC123  2015-02-27  1  QQ123 

Tbl B

ABC123, 100 

SQL:

SELECT 
    RP.POLNUMBER, RP.EFFDATE, SUM (LP.PREMIUM) 
FROM 
    TBL_A RP 
INNER JOIN 
    TBL_B LP ON RP.POLNUMBER = LP.POLNUMBER 
WHERE 
    RP.MOSTRECENTMODEL = 1 AND RP.POLNUMBER = 'ABC123' 
+0

Я почти уверен, что это имеет какое-то отношение к вашему объединению, что приводит к дублированию строк. –

ответ

1

Вы правильно определили проблему. Решение состоит в том, чтобы предварительно заполнителя данные перед join:

SELECT RP.POLNUMBER, RP.EFFDATE, LP.PREMIUM 
FROM TBL_A RP INNER JOIN 
    (SELECT LP.POLNUMBER, SUM(LP.PREMIUM) as PREMIUM 
     FROM TBL_B 
     GROUP BY LP.POLNUMBER 
    ) LP 
    ON RP.POLNUMBER = LP.POLNUMBER 
WHERE RP.MOSTRECENTMODEL = 1 AND RP.POLNUMBER = 'ABC123'; 

На самом деле, в целях повышения производительности коррелированный подзапрос, вероятно, должны работать лучше:

SELECT RP.POLNUMBER, RP.EFFDATE 
     (SELECT SUM(LP.PREMIUM) as PREMIUM 
     FROM TBL_B LP 
     WHERE RP.POLNUMBER = LP.POLNUMBER 
     ) as PREMIUM 
FROM TBL_A RP 
WHERE RP.MOSTRECENTMODEL = 1 AND RP.POLNUMBER = 'ABC123'; 

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

+0

Благодарим за помощь! – CraigRB89

0

Вы можете использовать это, если записи являются таблицей RP, являются дубликатами по всем атрибутам. Премиум-значение должно быть одинаковым для всех похожих полей Polnumber; иначе результат будет другим.

SELECT 
    RP.POLNUMBER, RP.EFFDATE, SUM (LP.PREMIUM)/COUNT(RP.POLNUMBER) 
FROM 
    TBL_A RP 
INNER JOIN 
    TBL_B LP ON RP.POLNUMBER = LP.POLNUMBER 
WHERE 
    RP.MOSTRECENTMODEL = 1 AND RP.POLNUMBER = 'ABC123' 
GROUP BY (RP.POLNUMBER)