2017-09-27 19 views
1

私は現在、過去2年間のすべての補完を表示するためのクエリを作成中です。ここでSQL Server 2012に月のデータが存在しない場合は0を表示

は私のクエリは

SELECT 
    SigD.actualCompletionDate, 
    MONTH(SigD.actualCompletionDate) AS [Month Completed], 
    YEAR(SigD.actualCompletionDate) AS [Year Completed] 
FROM 
    [BPS].[dbo].tbl_buildLoanSignificantDate AS SigD 
INNER JOIN 
    tbl_buildLoan AS bl ON SigD.BuildloanId = bl.BuildloanId 
INNER JOIN 
    tbl_buildLoanMortgage AS blm ON SigD.BuildloanId = blm.BuildloanId 
INNER JOIN 
    tbl_Broker AS brk ON bl.BrokerId = brk.BrokerId 
LEFT JOIN 
    tbl_firmNetwork AS firm ON brk.firmNetworkID = firm.firmNetworkID 
WHERE 
    SigD.actualCompletionDate BETWEEN '01/01/2016' AND GETDATE() 
    AND blm.mortgageStatusID = 7 
    AND bl.caseTypeID = 2 
    AND firm.name = 'First Complete' 

である私がいる問題は、私たちは何の完了を持っていなかったヶ月を示すことです。

この私が欲しい私のクエリの結果

actualCompletionDate Month Completed Year Completed 
------------------------------------------------------ 
2016-05-12      5    2016 
2016-01-21      1    2016 
2016-05-26      5    2016 
2016-04-12      4    2016 
2016-08-22      8    2016 
2017-07-26      7    2017 
2016-05-19      5    2016 

は年(2016 & 2017)の各月を示すことです。その月に補完がない場合は、その月に0を表示する必要があります。

私はここで自分自身を説明してくれることを願っています。

乾杯 ラスティ

答えて

1

これを試すことができますか。

;WITH FULLDATE AS (
SELECT * FROM 
    (VALUES(2016),(2017)) YEARS(Y) CROSS JOIN 
    (VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)) MONTHS(M) 
) 
SELECT 
    X.actualCompletionDate, 
    F.M AS [Month Completed], 
    F.Y AS [Year Completed] 
FROM 
    FULLDATE F 
    LEFT JOIN (
     SELECT 
     SigD.actualCompletionDate, 
     Month(SigD.actualCompletionDate) AS [Month Completed], 
     YEAR(SigD.actualCompletionDate) AS [Year Completed] 
     FROM 
     [BPS].[dbo].tbl_buildLoanSignificantDate AS SigD 
     INNER JOIN tbl_buildLoan AS bl ON SigD.BuildloanId = bl.BuildloanId 
     INNER JOIN tbl_buildLoanMortgage AS blm ON SigD.BuildloanId = blm.BuildloanId 
     INNER JOIN tbl_Broker AS brk ON bl.BrokerId = brk.BrokerId 
     INNER JOIN tbl_firmNetwork AS firm ON brk.firmNetworkID = firm.firmNetworkID 
     WHERE SigD.actualCompletionDate BETWEEN '01/01/2016' AND GETDATE() 
      and blm.mortgageStatusID = 7 
      and bl.caseTypeID = 2 
      and firm.name = 'First Complete' 
    ) AS X ON F.M = X.[Month Completed] AND F.Y = X.[Year Completed] 
    ORDER BY F.Y , F.M 
+0

サールスランは、この時間をとっていただきありがとうございました – RustyHamster

1

0場所を表示するには?予想されるすべての日付を含む派生テーブルに参加できます。

SELECT COALESCE(p.actualCompletionDate,<DefaultDate>) as actualCompletionDate, 
--replace <defaultDate> with what you want to show if there's no data in this month 
     [s.Month], 
     [s.Year] 
FROM (SELECT '1' as [month],'2016' as [year] 
     UNION ALL 
     SELECT '2' ,'2016' 
     .... --As many dates as you need 
    ) s 
LEFT JOIN (Your Query Here) p 
ON(p.month = s.[month completed] AND p.year = s.[year completed] 
関連する問題