并排显示当年和上一年的年度数据

Displaying annual data from current year and previous year side by side

所以我创建了一个临时文件 table 可以转储每个运营商和政策编号的每月数据。我想要输出的是这两个 table 并排输出数据,这样我就可以让 SSRS 聚合当前减去上一年值的数据。这是我的示例代码:

select carrier, 
       PolicyNumber,
       sum(AnnualPremium) CurrentYearAnnualPremium
from #totalinforcepremium
group by carrier, 
         PolicyNumber
order by PolicyNumber

select carrier, 
       PolicyNumber,
       sum(AnnualPremium) PreviousYearAnnualPremium
from #TotalInforcePremiumPreviousYear
group by carrier, 
         PolicyNumber
order by PolicyNumber

这是这两个 table 的结果:

这是我想要的输出:

我希望它以这种方式输出,这样我就可以轻松地在 SSRS 中对两年之间进行汇总。结果,我实际上不需要 return 承运人列,因为保单编号包含承运人名称。我在想我需要做一个外部应用吗?我是外部申请的新手,我不太确定该怎么做。谢谢!

我建议 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;

我应该指出,将不同的年份存储在单独的 table 中不是一个好主意。您应该将所有年份存储在一个 table 中。然后查询将是一个(简单的)条件聚合查询。

事实上,考虑到这些是临时的 table,原始数据可能会导致更简单的查询 - 也更快。

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