【发布时间】:2023-03-09 17:49:01
【问题描述】:
问题:需要查询以返回每年的 MONTH 和 YIELD。出于某种原因,如果在 a.Month 月份未找到数据,则查询将不会返回 b.Month 的产量。无论 a.Month 是否包含与“b”相同月份的数据,我都需要查询返回所有月度数据。
以下结果:应返回“MONTH 1 YIELD_1”的值。但它不...因为“MONTH 1 YIELD_0”不包含第 1 个月的值。
**DATA RESULTS WITH: LEFT OUTER JOIN:**
Month Yield_1 Yield_0
2 11.44 14
3 NULL 3.21
4 NULL 14.24
7 NULL 10.36
8 NULL 0
9 NULL -9.6
10 NULL 10.35
11 NULL 1.4
12 11.44 -1.18
**DATA RESULTS WITH RIGHT OUTER JOIN:**
Month Yield_1 Yield_0
NULL 11.44 NULL
2 11.44 14
12 11.44 -1.18
查询:
SET @ID_CARTERA = 8;
select
a.Month Month,
b.Monthly_Yield Yield_Year_1,
a.Monthly_Yield Yield_Year_0
from
( select
LEFT(A.F_ANOMES, 4) Year,
RIGHT(A.F_ANOMES, 2) Month,
ROUND(A.POR_RENTABILIDAD, 2) Monthly_Yield
from dr_rent_carteras_meses A
where A.ID_CARTERA = @ID_CARTERA
And A.IND_RENTABILIDAD = 1
And LEFT(A.F_ANOMES, 4) = ( select MAX(left(F_ANOMES, 4 ) ) - 0 from dr_rent_carteras_meses where ID_CARTERA = @ID_CARTERA ) ) a
LEFT outer join
( select
LEFT(A.F_ANOMES, 4) Year,
RIGHT(A.F_ANOMES, 2) Month,
ROUND(A.POR_RENTABILIDAD, 2) Monthly_Yield
from dr_rent_carteras_meses A
where A.ID_CARTERA = @ID_CARTERA
And A.IND_RENTABILIDAD = 1
And LEFT(A.F_ANOMES, 4) = ( select MAX(left(F_ANOMES, 4 ) ) - 1 from dr_rent_carteras_meses where ID_CARTERA = @ID_CARTERA ) ) b on ( a.Month = b.Month )
order by month asc
【问题讨论】:
-
使用完全联接来确保您的数据中确实有 a.month 1,因为外部联接应该可以解决您的问题。
标签: sql inner-join outer-join