0

以下查询检索第 0 年的季度数据。此查询成功检索第 1、2 和 3 季度。

Year    Quarter    Quarterly_Yield
2012       3             6.6
2012       6             5.58
2012       9             7.28

问题:无论该季度是否存在数据记录,我都需要返回所有四个季度的“结果”。

期望的解决方案:我想指示每个季度选择字段“如果没有记录存在,则返回 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 ) 
4

1 回答 1

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 ) 

注意:我没有测试过这个查询,所以它可能有语法错误。

于 2013-01-31T21:38:07.103 回答