以下查询检索第0年的季度数据。此查询成功检索第1,第2和第3季度。
Year Quarter Quarterly_Yield
2012 3 6.6
2012 6 5.58
2012 9 7.28
问题:我需要为所有四个季度都返回“结果”,无论该季度是否存在数据记录。
渴望解决方案:我想指示每个季度SELECT字段“如果没有记录存在则返回NULL”。这样,无论记录是否存在数据,我的表格都将包含所有4个季度的结果。
set @ID_CARTERA = 1;
select
LEFT(A.F_ANOTRIMESTRE, 4 ) Year,
RIGHT(A.F_ANOTRIMESTRE, 2 ) Quarter,
ROUND ( A.POR_RENTABILIDAD, 2 ) Quarterly_Yield
from dr_rent_carteras_trimestres A
where A.ID_CARTERA = @ID_CARTERA
And LEFT(A.F_ANOTRIMESTRE, 4 ) = ( select MAX(left(F_ANOTRIMESTRE, 4 ) ) - 0
from dr_rent_carteras_trimestres
where ID_CARTERA = @ID_CARTERA )
答案 0 :(得分:0)
对于此类查询,您需要设置一个驱动程序表,其中包含输出中所需的所有行。你可以通过交叉加入年份和季度来获得这个 - 如果我正确理解数据(也就是说,每年的季度是1,2,3,4)。
以下显示了如何完成此操作:
select driver.year, driver.quarter,
ROUND ( A.POR_RENTABILIDAD, 2 ) Quarterly_Yield
from (select y.year, q.Quarter
from (select distinct LEFT(F_ANOTRIMESTRE, 4 ) as Year
from dr_rent_carteras_trimestres
) y cross join
(select distinct RIGHT(F_ANOTRIMESTRE, 2 ) as Quarter
from dr_rent_carteras_trimestres
) q
) driver left outer join
dr_rent_carteras_trimestres A
on LEFT(A.F_ANOTRIMESTRE, 4 ) = driver.y and RIGHT(A.F_ANOTRIMESTRE, 2 ) = driver.q
where A.ID_CARTERA = @ID_CARTERA And
driver.year = (select MAX(left(F_ANOTRIMESTRE, 4 ) ) - 0
from dr_rent_carteras_trimestres
where ID_CARTERA = @ID_CARTERA )
注意:我没有测试过此查询,因此可能会出现语法错误。