2016-06-21 5 views
1

私は今月4月までのデータしか持っていません。だから私はLEFT JOINを使用してカレンダーテーブルに参加して年末まで残りの月を持っていこうとしています。 。 カレンダーテーブルにYearNumber、MonthNumber、およびMonthNameがあります。 私は何が間違っていますか?LEFT JOINがなぜNULL値を持つMonthフィールドを持って来ないのですか

SELECT  
      Underwriter, 
      sum(case when TransactionType IN ('Policy', 'Reinstatement') then 1 ELSE 0 END) as PoliciesBound,    
      b.MonthNum, 
      b.YearNum, 
      b.MonthName 

FROM  tblCalendar b 
LEFT JOIN Test_Plaza_ProductionReport a ON b.MonthNum=Month(a.EffectiveDate) AND b.YearNum = YEAR(a.EffectiveDate) 
--FROM  Test_Plaza_ProductionReport 
WHERE  Year(a.EffectiveDate)=2016 AND Underwriter <>'Batcheller, Jerry' 
GROUP BY Underwriter, 
      b.YearNum, 
      b.MonthName, 
      b.MonthNum 

結果は次のようにする必要があります:enter image description here

しかし、唯一の4月までの私の結果: enter image description here

私はLEFT JOINを使って、何をしないのですか?

+2

あなたは 'where'基準で'外部結合 'を否定しています。代わりにその条件を 'join'に移してください。それはあなたのために働くはずです。 – sgeddes

+0

条件を結合に移動しますか?どういう意味ですか?ありがとう – Oleg

+0

ヒント:意味のあるエイリアスを使用して、すべての列に適用します。 「Underwriter」と「TransactionType」がどこから来たのかは不明である。 '...をtblCalendarからCalを使用して、外部結合Test_Plaza_ProductionReportをProdRpt ... 'にしました。 'C'や' PR'でも 'a'や' b'よりも便利です。 – HABO

答えて

2

私のコメントに記載されているように、where基準はあなたのouter joinを否定しています。代わりにこれを試してみてください:

... 
FROM tblCalendar b 
    LEFT JOIN Test_Plaza_ProductionReport a ON  
     b.MonthNum=Month(a.EffectiveDate) AND 
     b.YearNum = YEAR(a.EffectiveDate) AND 
     a.Underwriter <>'Batcheller, Jerry' 
WHERE  b.YearNum=2016 
GROUP BY Underwriter, 
      b.YearNum, 
      b.MonthName, 
      b.MonthNum 

注、私はunderwriterフィールドがレポートのテーブルではなく、カレンダーのテーブルであると仮定しています。

+0

どうもありがとうございました。簡単な質問には申し訳ありません。 – Oleg

関連する問題