我有一个查询,该查询根据当前日期计算每天导入的记录数。唯一的问题是,只有在导入记录并且忽略NULL时,计数才返回
我用MSSQL中的一列创建了一个CTE,该列列出了某个范围内的日期,例如2019-01-01-今天
我当前得到的查询是这样的:
c - 1
对于表中存在的日期,我得到的结果很好,例如:
SELECT TableName, DateRecordImported, COUNT(*) AS ImportedRecords
FROM Table
WHERE DateRecordImported IN (SELECT * FROM DateRange_CTE)
GROUP BY DateRecordImported
但是如果CTE中的日期不在表中,则我需要返回“ 0”计数。有没有更好的选择可以返回0计数,或者我的方法是否需要稍作改动
答案 0 :(得分:2)
您可以执行LEFT JOIN
:
SELECT C.Date, COUNT(t.DateRecordImported) AS ImportedRecords
FROM DateRange_CTE C LEFT JOIN
table t
ON t.DateRecordImported = C.Date -- This may differ use actual column name instead
GROUP BY C.Date; -- This may differ use actual column name instead
答案 1 :(得分:2)
将CTE的位置从子查询移至FROM:
SELECT T.TableName,
DT.PCTEDateColumn} AS DateRecordImported,
COUNT(T.{TableIDColumn}) AS ImportedRecords
FROM DateRange_CTE DT
LEFT JOIN [Table] T ON DT.{TEDateColumn} = T.DateRecordImported
GROUP BY DT.{CTEDateColumn};
您需要替换大括号({}
)中的值
答案 2 :(得分:0)
您可以尝试
SELECT TableName,DateRecordImported, DateRecordImported为null的情况 然后是“ 0” else count(*)以AS ImportedRecords结尾 FROM表完整联接DateRange_CTE 在Table.DateRecordImported DateRange_CTE.ImportedDate上 按DateRecordImported,ImportedDate分组
(ImportedDate是CTE的列的名称)