问题:即使在a.Month中找不到Month_Name,也需要查询返回b.Monthly_Yield的MONTH_NAME和YIELD。出于某种原因,如果在a.Month中找不到月份,即使我添加到选择b.month,查询仍然不会返回b.Monthly_Yield值。我现在拥有它的方式,如果在表“a”中找不到MONTH,但是在表“b”中找到月份,结果将不会返回。即使在“a”中找不到那个月,我也需要返回“b”的结果。
注意:“月”是月号
LETER OUTER JOIN的数据结果:
Month Month_Name Yield_1 Yield_0
------------------------------------
2 Febrero 11.44 14
3 Marzo NULL 3.21
4 Abril NULL 14.24
7 Julio NULL 10.36
8 Agosto NULL 0
9 Septiembre NULL -9.6
10 Octubre NULL 10.35
11 Noviembre NULL 1.4
12 Diciembre 11.44 -1.18
有正确的外部联接的数据结果:
Month Month_Name Yield_1 Yield_0
------------------------------------
NULL NULL 11.44 NULL
2 Febrero 11.44 14
12 Diciembre 11.44 -1.18
查询:
SET @ID_CARTERA = 8;
select
a.Month,
a.Month_Name,
a.Monthly_Yield,
b.Monthly_Yield
from
( select
RIGHT(A.F_ANOMES, 2) Month,
IF(RIGHT(A.F_ANOMES, 2)=01,'Enero',
IF(RIGHT(A.F_ANOMES, 2)=02,'Febrero',
IF(RIGHT(A.F_ANOMES, 2)=03,'Marzo',
IF(RIGHT(A.F_ANOMES, 2)=04,'Abril',
IF(RIGHT(A.F_ANOMES, 2)=05,'Mayo',
IF(RIGHT(A.F_ANOMES, 2)=06,'Junio',
IF(RIGHT(A.F_ANOMES, 2)=07,'Julio',
IF(RIGHT(A.F_ANOMES, 2)=08,'Agosto',
IF(RIGHT(A.F_ANOMES, 2)=09,'Septiembre',
IF(RIGHT(A.F_ANOMES, 2)=10,'Octubre',
IF(RIGHT(A.F_ANOMES, 2)=11,'Noviembre',
IF(RIGHT(A.F_ANOMES, 2)=12,'Diciembre',
'')
))))))))))) Month_Name,
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
RIGHT(A.F_ANOMES, 2) Month,
IF(RIGHT(A.F_ANOMES, 2)=01,'Enero',
IF(RIGHT(A.F_ANOMES, 2)=02,'Febrero',
IF(RIGHT(A.F_ANOMES, 2)=03,'Marzo',
IF(RIGHT(A.F_ANOMES, 2)=04,'Abril',
IF(RIGHT(A.F_ANOMES, 2)=05,'Mayo',
IF(RIGHT(A.F_ANOMES, 2)=06,'Junio',
IF(RIGHT(A.F_ANOMES, 2)=07,'Julio',
IF(RIGHT(A.F_ANOMES, 2)=08,'Agosto',
IF(RIGHT(A.F_ANOMES, 2)=09,'Septiembre',
IF(RIGHT(A.F_ANOMES, 2)=10,'Octubre',
IF(RIGHT(A.F_ANOMES, 2)=11,'Noviembre',
IF(RIGHT(A.F_ANOMES, 2)=12,'Diciembre',
'')
))))))))))) Month_Name,
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 )
答案 0 :(得分:1)
将LEFT OUTER JOIN改为RIGHT OUTER JOIN。
@ypercube是正确的。使用FULL OUTER JOIN。
您没有获得月份名称的原因是表格中现在有值。所以你需要从b表中获取它。
尝试
ISNULL(a.Month, b.Month) as Month
ISNULL(a.Month_Name, b.Month_Name) as Month
另外,请听取意见的建议。使用正确的数据类型函数。另请参阅CASE语句。
您还可能希望查询联接中的所有信息,然后对外部查询执行数据转换(月份名称)。这样你就不必两次了。