如果日期不在CTE中,则返回NULL值

时间:2019-03-28 12:01:08

标签: sql sql-server

我有一个查询,该查询根据当前日期计算每天导入的记录数。唯一的问题是,只有在导入记录并且忽略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计数,或者我的方法是否需要稍作改动

3 个答案:

答案 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的列的名称)