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

时间:2017-02-06 18:50:33

标签: sql sql-server sql-server-2008 tsql ssrs-2008

所以我创建了一个临时表,可以转储每个运营商和政策号码的月度数据。我想要输出的是这两个表并排输出数据,所以我可以让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

以下是这两个表的结果:

enter image description here

这是我想要的输出:

enter image description here

我希望它以这种方式输出,这样我就可以轻松地在SSRS中进行两年的聚合。因此,我实际上不需要返回运营商列,因为policynumber包含运营商名称。我想我需要做一个外部申请?我是外部申请的新手,我不确定如何去做。谢谢!

2 个答案:

答案 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