【发布时间】:2013-10-09 18:39:18
【问题描述】:
所以我知道这已经完成了,但我找不到我需要的确切答案,所以也很高兴听到有关如何做到这一点的替代方案。
在 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 年值的表格(月份匹配) 但是当我查看 2012 年时,之前的数据仅存在于 2011 年同月交易完成时,例如
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 月)
现在,我有月份匹配的原因是,如果我加入一年、半年或 Qtr,我的所有数据都在前一列中重复。我正在寻找的是如果数据匹配,则显示当年与上一年的收入,如果它存在于当年但不上一年,则显示 null prev_rev,反之亦然。
希望有人可以提供帮助:) 提前致谢。
【问题讨论】:
标签: sql sql-server-2008 join outer-join