0

次のクエリは、0 年の四半期データを取得します。このクエリは、四半期 1、2、および 3 を正常に取得します。

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

問題:四半期のデータ レコードが存在するかどうかに関係なく、4 つの四半期すべての「結果」を返す必要があります。

望ましい解決策:各四半期の 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 ) 
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 に答える