Возвращает значение NULL, если Date не в CTE - PullRequest
0 голосов
/ 28 марта 2019

У меня есть запрос, который подсчитывает количество записей, импортированных за каждый день в соответствии с текущей датой.Единственная проблема заключается в том, что счетчик возвращается только тогда, когда записи были импортированы, а значения NULLS игнорируются

Я создал CTE с одним столбцом в MSSQL, в котором перечислены даты в определенном диапазоне, например 2019-01-01 - сегодня.

Запрос, который я получил в настоящее время, выглядит следующим образом:

SELECT TableName, DateRecordImported, COUNT(*) AS ImportedRecords
FROM Table
WHERE DateRecordImported IN (SELECT * FROM DateRange_CTE)
GROUP BY DateRecordImported

Я получаю точные результаты для дат, которые существуют в таблице, например:

TableName  DateRecordImported  ImportedRecords
______________________________________________
Example      2019-01-01         165
Example      2019-01-02         981
Example      2019-01-04         34
Example      2019-01-07         385
....

но мне нужен счетчик '0', если даты из CTE нет в таблице.Есть ли лучшая альтернатива, чтобы использовать для возврата счетчика 0 или мой метод нуждается в незначительном изменении

Ответы [ 3 ]

2 голосов
/ 28 марта 2019

Перемещение позиции CTE из подзапроса в ОТ:

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 голосов
/ 28 марта 2019

Вы можете сделать 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
0 голосов
/ 28 марта 2019

Вы можете попробовать это

SELECT TableName, DateRecordImported, случай, когда DateRecordImported является нулем тогда 0 еще счет (*) конец AS ImportedRecords FROM Table full join DateRange_CTE on Table.DateRecordImported DateRange_CTE.ImportedDate сгруппировать по DateRecordImported, ImportedDate

(ImportedDate - имя столбца CTE)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...