并排显示当年和上一年的年度数据
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
所以我创建了一个临时文件 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