月次ステータス データベース ビューに基づいてレポートを作成する必要があります。ビュー内のデータは次のようになります。
Category | Revenue | Yearh | Month
Bikes 10 000 2008 1
Bikes 12 000 2008 2
Bikes 12 000 2008 3
Bikes 15 000 2008 1
Bikes 11 000 2007 2
Bikes 11 500 2007 3
Bikes 15 400 2007 4
...など
ビューには、製品カテゴリ、収益、年、および月があります。2007 年と 2008 年を比較して、売上のない月を 0 と表示するレポートを作成したいと考えています。したがって、レポートは次のようになります。
Category | Month | Rev. This Year | Rev. Last Year
Bikes 1 10 000 0
Bikes 2 12 000 11 000
Bikes 3 12 000 11 500
Bikes 4 0 15 400
注目すべき重要な点は、月 1 は 2008 年にのみ売上があり、したがって 2007 の場合は 0 であるということです。また、月 4 は 2008 年にのみ売上がないため、0 ですが、2007 年に売上があり、まだ表示されています。
また、このレポートは実際には会計年度のものです。そのため、2007 年または 2008 年のいずれかの月 5 に売上がなかった場合、両方に 0 の空の列があるとよいでしょう。
私が得たクエリは次のようになります。
SELECT
SP1.Program,
SP1.Year,
SP1.Month,
SP1.TotalRevenue,
IsNull(SP2.TotalRevenue, 0) AS LastYearTotalRevenue
FROM PVMonthlyStatusReport AS SP1
LEFT OUTER JOIN PVMonthlyStatusReport AS SP2 ON
SP1.Program = SP2.Program AND
SP2.Year = SP1.Year - 1 AND
SP1.Month = SP2.Month
WHERE
SP1.Program = 'Bikes' AND
SP1.Category = @Category AND
(SP1.Year >= @FinancialYear AND SP1.Year <= @FinancialYear + 1) AND
((SP1.Year = @FinancialYear AND SP1.Month > 6) OR
(SP1.Year = @FinancialYear + 1 AND SP1.Month <= 6))
ORDER BY SP1.Year, SP1.Month
このクエリの問題は、2008 年には売上がありませんでしたが、2007 年には実際に売上があったため、上記のサンプル データの 4 行目を返さないことです。
これはおそらく一般的なクエリ/問題ですが、長い間フロントエンド開発を行った後、私の SQL は錆びています。どんな助けでも大歓迎です!
ところで、私はこのクエリに SQL 2005 を使用しているので、役立つ新機能があれば教えてください。