我试图加入两张桌子。您将在下面注意到的一些工作是重复的。这些是我遇到问题的唯一问题。当我加入并收取溢价而不是获得100美元的预期结果时,我看到200美元。关于如何使查询不乘以* 2的任何想法?谢谢!
Tbl A
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 :(得分:2)
您已正确识别问题。解决方案是在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';
您的过滤条件看起来很有选择性。没有理由将整个表聚合为仅返回少数策略的结果。
答案 1 :(得分: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)