2017-12-25 4 views
0

契約の対象となる会計年度の半分を計算する必要があります。SQL照会 - 異なる部分を持つケース

7月から12月の間はH1です。
1月から6月の間​​はH2

となります。契約書は何年も続く可能性がありますので、今年度はAgreementEndDateを締めて会計年度を決定します。コードのこの部分が機能します(つまり、min(case when AgreementEndDate>[email protected] then AgreementEndDate else '' end) as 'Agreement End Date'

ただし、ここでは問題が発生しています。私はH1またはH2のどちらかを 'Agreement Window'の最後に追加する必要がありますが、まだそれを把握していません。

複数のWHEN句を追加しようとしましたが、重複する行があります。それで私がminと一緒に行った理由。

提案がありますか?

DECLARE @dtDate DATE 
SET @dtDate = GETDATE(); 
Select 
    AD.TPID 
    ,min(case when AgreementEffectiveDate<[email protected] then AgreementEffectiveDate else '' end) as 'Agreement Effective Date' 
    ,min(case when AgreementEndDate>[email protected] then AgreementEndDate else '' end) as 'Agreement End Date' 
    ,min(case when AgreementEndDate>[email protected] then 'FY' + convert(varchar(2),(FORMAT(AgreementEndDate, 'yy') - 1)) + ' H2' 
      --WHEN (month(AgreementEndDate) >= 1 and month(AgreementEndDate) <= 6) THEN 'FY' + convert(varchar(2),(FORMAT(AgreementEndDate, 'yy') - 1)) + ' H2' 
      --WHEN (month(AgreementEndDate) >= 7 and month(AgreementEndDate) <= 12) THEN 'FY' + convert(varchar(2),(FORMAT(AgreementEndDate, 'yy') - 1)) + ' H1' 
      else '' end) as 'Agreement Window' 
    from AgreementDetails AD 

答えて

0

私はそれを理解しました。ここに解決策があります。

,min(case when AgreementEndDate>[email protected] and ((month(AgreementEndDate) >= 1 and month(AgreementEndDate) <= 6)) THEN 'FY' + convert(varchar(2),(FORMAT(AgreementEndDate, 'yy') - 1)) + ' H2' 
      when AgreementEndDate>[email protected] and ((month(AgreementEndDate) >= 7 and month(AgreementEndDate) <= 12)) THEN 'FY' + convert(varchar(2),(FORMAT(AgreementEndDate, 'yy') - 1)) + ' H1' 
     else '' end) as 'Agreement Window' 
関連する問題