2017-02-06 12 views
1

私はキャリアとポリシー番号ごとに毎月のデータをダンプする一時テーブルを作成しました。私が出力したいのは、これらの2つのテーブルがデータを並べて出力するため、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 

は、これらのテーブルの両方からの結果である:

enter image description here

これは私の所望の出力です:

enter image description here

私はそれをしたいですこのように出力することで、SSRSの2年間で簡単に集計することができます。私は実際にポリサー番号にキャリア名が含まれているので、結果としてキャリア欄を返す必要はありません。私は外側の申請をする必要があると思っていますか?私は外からの応募が新しく、私はそれについてどうやって行くのか本当に分かりません。ありがとう!

答えて

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; 

私は悪い考えでは別々のテーブルで別の年を保存することに注意してください。すべての年を単一のテーブルに格納するだけです。次に、クエリは(単純な)条件付き集計クエリになります。

実際、これらが一時テーブルであることを考えると、元のデータはより単純なクエリとなり、より高速なクエリになる可能性があります。

+0

これは完璧に機能します。ありがとうございました! – Lisbon

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 
関連する問題