2013-01-31 65 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) 

注:我沒有測試此查詢,以便它可能有語法錯誤。

相關問題