0

これが、年初来のポリシーの数を返す私のクエリです。'active'に等しいステータスのみに影響するステートメントのケースを実行する方法を知りたいです。

select distinct
count(pol3.CT_ID + pol3.CT_NSID) as 'YTD',
pol3.ct_status
from contract pol3
where (pol3.CT_Status = 'Quote' or pol3.ct_status='Active' or pol3.ct_status='Declined')
and Year(pol3.CT_Subscription_Date)>= datediff(year,(DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)), getdate())
group by pol3.ct_status

現在の出力は次のとおりです。

ここに画像の説明を入力してください

やってみた

select distinct
count(pol3.CT_ID + pol3.CT_NSID) as 'YTD',
pol3.ct_status
from contract pol3
where (pol3.CT_Status = 'Quote' or pol3.ct_status='Active' or pol3.ct_status='Declined')
and CT_ORIGINAL_QUOTE_ID is not null
and CT_ORIGINAL_QUOTE_NSID is not null
and Year(pol3.CT_Subscription_Date)>= datediff(year,(DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)), getdate())
group by pol3.ct_status

3つのステータスすべてを対象としているため、これは明らかに間違っています。ct_original_ *がアクティブステータスのみをターゲットにするようにするにはどうすればよいですか?手がかりやポインタがあれば大歓迎です。

4

1 に答える 1

1

SELECTでCASEステートメントを使用して1または0を返し、返された値をSUMします。

SELECT pol3.ct_status, SUM(CASE 
    WHEN ct_status IN ('Declined','Quote') THEN 1 // all of these should count as one policy
    WHEN ct_status = 'Active' and CT_ORIGINAL_QUOTE_ID is not null and CT_ORIGINAL_QUOTE_NSID is not null THEN 1 // if data in ID and NSID and active count it
    ELSE 0 // all others count as nothing
    END)
from contract pol3
where (pol3.CT_Status = 'Quote' or pol3.ct_status='Active' or pol3.ct_status='Declined')
and Year(pol3.CT_Subscription_Date)>= datediff(year,(DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)), getdate())
group by pol3.ct_status
于 2013-03-08T21:26:27.563 に答える