@Johnick

Как составить запрос MSSQL?

Приветствую.
Необходимо выбрать составить запрос который будет по диапозону дат считать кол-во + группировать его. Если за какую нибудь дату в диапозоне ничего не найдено, нужно ее вывести и поставить что она равно 0.
Вот что у меня получилось:
SELECT COUNT(DISTINCT(session_id))         AS count1,
       CONVERT(varchar(10),event_time,120) AS event_time 
FROM dbo.logs_ft 
WHERE CONVERT(varchar(10),event_time,120) BETWEEN '2017-11-01'
                                              AND '2017-11-09'
      AND event = 'recognition_result_interpretation' 
      AND value = '1'
GROUP BY CONVERT(varchar(10),event_time,120)


Вывод

"count1" "event_time"
"1" "2017-11-01"
"28" "2017-11-02"
"48" "2017-11-03"
"20" "2017-11-04"
"15" "2017-11-06"
"35" "2017-11-07"
"46" "2017-11-09"

Как видно за 5 и за 8 ничего нет, а необходимо, чтобы дата присутствовала и значение count было равно 0.
  • Вопрос задан
  • 160 просмотров
Пригласить эксперта
Ответы на вопрос 1
art_karetnikov
@art_karetnikov
Лучший мой проект: Мобильный банк Сбербанка РФ.
Чудес, Золушка, не бывает. Если это выборка, то выбрать можно только что-то существующее в базе. В случае, если запись не существует, то можно сделать CASE sessionid is null then 0 else sessionid end case
Т.е. написать вместо Null - 0, это реально.

Но если даты нет, то волшебным образом вместо Null поставить правильное значение даты - нереально.
Значит? Придется эту дату делать руками. Делаете переменную. Засовываете в нее минимальное значение диапазона, 01. Далее делаете эту переменную DateAdd + 1 день, если число записей строго равно диапазону.

Если нет, то заполняете временную таблицу. Курсором/циклом. Количество дней есть. Задаете ей некий id и этот же id любым способом проставляете в вашем первом запросе. Дальше join между ними. Всё.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы