Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果SQL Server 2012中当月没有数据,则显示0_Sql_Date_Count - Fatal编程技术网

如果SQL Server 2012中当月没有数据,则显示0

如果SQL Server 2012中当月没有数据,则显示0,sql,date,count,Sql,Date,Count,我目前正在进行一项查询,以显示我们在过去两年中的所有完工情况 这是我的问题 SELECT SigD.actualCompletionDate, MONTH(SigD.actualCompletionDate) AS [Month Completed], YEAR(SigD.actualCompletionDate) AS [Year Completed] FROM [BPS].[dbo].tbl_buildLoanSignificantDate AS SigD

我目前正在进行一项查询,以显示我们在过去两年中的所有完工情况

这是我的问题

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

我希望我在这里已经解释清楚了

干杯
Rusty

显示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]
选择COALESCE(p.actualCompletionDate,)作为actualCompletionDate,
--如果本月没有数据,则替换为要显示的内容
[s.Month],
[s.Year]
从(选择“1”作为[月份],“2016”作为[年度]
联合所有
选择“2”,“2016”
..--你需要多少日期就有多少
)
左键连接(您在此处的查询)p
年月日(p.month=s[完成月]和p.year=s[完成年]
你能试试这个吗

;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

萨斯兰:这是一种魅力,花时间回答这个问题很受欢迎