MySQL SELECT字段为NULL如果不存在于表中

时间:2013-01-31 20:58:18

标签: mysql sql select not-exists

以下查询检索第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 ) 

1 个答案:

答案 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 ) 

注意:我没有测试过此查询,因此可能会出现语法错误。