如果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
萨斯兰:这是一种魅力,花时间回答这个问题很受欢迎