問題:Month_Nameがa.Monthに見つからない場合でも、b.Monthly_YieldのMONTH_NAMEとYIELDを返すクエリが必要です。何らかの理由で、月がa.Monthに見つからない場合、選択範囲b.monthに追加しても、クエリはb.Monthly_Yield値を返しません。私が今持っている方法では、月がテーブル "a"に見つからないが、月がテーブル "b"にある場合、結果は返されません。「a」にその月が見つからなくても、「b」の結果を返す必要があります。
注:「月」は月番号です
左外部結合によるデータ結果:
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 )