所以我创建了一个临时表,可以转储每个运营商和政策号码的月度数据。我想要输出的是这两个表并排输出数据,所以我可以让SSRS汇总当前数据减去前一年的值。这是我的示例代码:
Upper Loop Date: 2017-02-01 23:59:55 0
Upper Loop Date: 2017-02-01 23:59:50 1
Upper Loop Date: 2017-02-01 23:59:50 2
Upper Loop Date: 2017-02-01 23:59:38 3
Upper Loop Date: 2017-02-01 23:59:35 4
Lower Loop Date: 2017-02-01 23:59:35 5
Lower Loop Date: 2017-02-01 23:59:38 5
Lower Loop Date: 2017-02-01 23:59:50 5
Lower Loop Date: 2017-02-01 23:59:50 5
Lower Loop Date: 2017-02-01 23:59:55 5
以下是这两个表的结果:
这是我想要的输出:
我希望它以这种方式输出,这样我就可以轻松地在SSRS中进行两年的聚合。因此,我实际上不需要返回运营商列,因为policynumber包含运营商名称。我想我需要做一个外部申请?我是外部申请的新手,我不确定如何去做。谢谢!
答案 0 :(得分:0)
我建议full outer join
:
with y as (
select carrier, PolicyNumber, sum(AnnualPremium) CurrentYearAnnualPremium
from #totalinforcepremium
group by carrier, PolicyNumber
),
yp as (
select carrier, PolicyNumber, sum(AnnualPremium) as CurrentYearAnnualPremium
from #TotalInforcePremiumPreviousYear
group by carrier, PolicyNumber
)
select coalesce(y.carrier, yp.carrier) as carrier,
coalesce(y.policynumber, yp.policynumber) as policynumber,
y.CurrentYearAnnualPremium, yp.CurrentYearAnnualPremium
from y full outer join
yp
on yp.carrier = y.carrier and yp.policynumber = y.policynumber
order by PolicyNumber;
我应该注意,在一个坏主意中将不同年份存储在单独的表中。您应该将所有年份存储在一个表中。然后查询将是(简单的)条件聚合查询。
事实上,鉴于这些是临时表,原始数据可能会导致更简单的查询 - 也会更快。
答案 1 :(得分:0)
select A.PolicyNumber,A.CurrentYearAnnualPremium,B.PreviousYearAnnualPremium
FROM
( select carrier,
PolicyNumber,
sum(AnnualPremium) CurrentYearAnnualPremium
from #totalinforcepremium as a
group by carrier,
PolicyNumber) as A
LEFT JOIN
(
select carrier,
PolicyNumber,
sum(AnnualPremium) PreviousYearAnnualPremium
from #TotalInforcePremiumPreviousYear
group by carrier,
PolicyNumber
order by PolicyNumber) as B
ON B.PolicyNumber = A.PolicyNumber