2013-01-31 54 views
0

下面的查询检索季度数据0年该查询成功地检索季度1,2,和3MySQL的选择字段为NULL,如果表中不存在

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

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

DESIRED SOLUTION:我想指示每个季度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

为什么你在单个字段中存储数据? – hjpotter92

+0

我没有创建数据库... – nerikh

回答

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) 

注:我没有测试此查询,以便它可能有语法错误。

相关问题