【发布时间】:2011-11-22 17:39:35
【问题描述】:
我使用下面的代码来计算给定月份(在本例中为 9 月)按承保范围(汽车)赚取的保费。代码所做的是减去截至 9 月 30 日的所有时间赚取的总保费减去截至 8 月 31 日的所有时间赚取的总保费,以返回仅在 9 月份赚取的保费。
结果如下所示:
eprem coveragecode
0.0211 AD
277970.8291 BI
245700.6741 COLL
86997.5694 COMP
85.0083 CustomParts
848.7873 Death
0.00 ECL
0.00 GPIP
692.3802 Income
2410.5513 MED
267670.1099 PD
387628.504 PIP
26.8767 PU
11736.2762 Rental
4304.3367 Towing
4211.2574 UIMBI
19804.8964 UMBI
15145.3211 UMPD
当我将所有保险的保费加起来时,我得到 1325233.399,这是 9 月份赚取的正确保费金额。
现在我要做的是在结果中添加邮政编码字段。如果我在代码中没有指定邮政编码列的情况下运行下面的代码,那么我得到的上述结果是正确的,但是当我添加邮政编码列时,我会返回数千行,这是预期的,但是当我加起来我得到的总保费时1323608.401 而不是正确的总数 1325233.399。我相信正在发生的事情是在一个月(派生表)中存在某些覆盖范围和邮政编码组合(这是我加入我的 2 个派生表的内容),并在另一个中注明。当我进行右连接时,我得到不同数量的行返回,当我做左连接时,但是当我将所有保费加起来时,它总是等于 1323608.401 而不是 1325233.399 。我认为解决我的问题的方法是使用完整的外部联接,从而返回所有结果(即使是那些不匹配的结果),这样我的总保费将加起来 1325233.399 但无论哪种类型的联接,我仍然只能得到 1323608.401我尝试使用。有谁知道这里可能发生了什么???任何帮助将不胜感激。谢谢!
SELECT sept.eprem-aug.eprem as eprem , sept.coveragecode, zipcode
from
(select
SUM(EarnedPremium) AS eprem,coveragecode, evaluationdate, zipcode
FROM dbo.StatRateSummary
where evaluationdate = '09-30-2011'
and decpagetypecode != 'x'
GROUP BY evaluationdate ,coveragecode, zipcode
) as sept full outer join
(select
SUM(EarnedPremium) AS eprem,coveragecode, evaluationdate, zipcode
FROM dbo.StatRateSummary
where evaluationdate = CONVERT(DATETIME, DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,'09-30-2011'),0)), 102)
and decpagetypecode != 'x'
GROUP BY evaluationdate ,coveragecode, zipcode
) as aug on sept.coveragecode = aug.coveragecode and sept.zipcode = aug.zipcode
where sept.coveragecode is not null and sept.coveragecode <> ''
order by coveragecode, sept.evaluationdate
【问题讨论】:
-
EarnedPremium 是什么数据类型?
-
这是一种“金钱”数据类型
标签: sql sql-server-2005 outer-join