だから私はこれが死ぬまで行われたことを知っていますが、必要な正確な答えを見つけることができないので、これを行う方法の代替案について聞いてうれしいです.
SQL Server 2008R2 では、クライアント ID、年、月、収益があり、次のようなものを作成したいので、完全外部結合を実行しています。
Client_ID 、年、月の収益、Prev_Year、Prev_Month。Prev_Revenue. 5003 2011 12 100 2010 12 50 5003 2012 12 120 2011 12 100
私が使用したコードは次のとおりです。
SELECT DISTINCT Sales.fin_year
,sales.fin_qtr
,sales.fin_Half
,sales.fin_month
,Sum(sales.rev) AS Rev
,Sales.client_name
,sales.client_id,
prev.fin_year AS Prev_Fin_Year
,prev.fin_qtr AS Prev_Fin_Qtr
,prev.fin_Half AS Prev_Fin_Half
,prev.fin_month AS Prev_Fin_Month,
Sum(prev.rev) AS prev_Rev
FROM Thisismytable Sales
FULL OUTER JOIN
Thisismytable PREV
ON PREV.fin_year = DATEADD(Y,-1,sales.fin_year)
AND prev.fin_qtr = sales.fin_qtr
AND prev.fin_half = sales.fin_half
AND (prev.fin_month = sales.fin_month)
AND PREV.client_id = Sales.client_id
私が得たのは、2011 年のデータと以前の 2010 年の値 (月が一致する場所) を表示するテーブルです。
January 2011 = Revenue of $20
January 2012 = Previous revenue of $20
問題は、2011 年の値が存在する場合、2012 年のデータにはまったく表示されないことです。これを行うものが必要です:
January 2012 = 100 Previous Rev =20
2012 年 2 月 = NULL (2012 年 2 月のデータはまったく存在しない) 前のリビジョン = 500 (2011 年 2 月)
ここで、月が一致している理由は、年、半年、または四半期で結合すると、すべてのデータが前の列で重複するためです。私が探しているのは、データが一致する場合は、前年対前年の収益を表示し、年に存在するが前年に存在しない場合は、null prev_rev を表示し、その逆も同様です。
誰かが助けてくれることを願っています:) よろしくお願いします。