0

レコード数 = 0 の場合に「No Result」などのメッセージを返すには、次のクエリが必要です。

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 ) 
            and
            RIGHT(A.F_ANOTRIMESTRE, 2 ) = 12) 
4

1 に答える 1

0

次のようにシステムをだますことができます。

  1. COUNT(*) を返すクエリを生成します。カウントする行がゼロであっても、これは常に行を返します

  2. メイン クエリを COUNT(*) クエリと左結合します。Case ステートメントを使用して、結果を「No Results」に置き換えます。

したがって、結果のクエリは次のようになります (仮定 - メインクエリはゼロまたは 1 つのレコードのみを返すため、LEFT JOIN に ON 句はありません!!!!):

set @ID_CARTERA = 1;

select    
CASE cnt WHEN 0 THEN "No Results" ELSE Year END,
Quarter,
Quarterly_Yield
FROM
(select count(*) AS cnt
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 ) 
            and
            RIGHT(A.F_ANOTRIMESTRE, 2 ) = 12) ) cnt_tbl
LEFT JOIN
( 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 ) 
            and
            RIGHT(A.F_ANOTRIMESTRE, 2 ) = 12) ) main_tbl

UNION でも同じことができます。方法を教えてほしい場合は、コメントで尋ねてください

于 2013-02-01T03:13:32.387 に答える