Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вывести все даты за период, даже без событий  [new]
sunsunych
Member

Откуда:
Сообщений: 8
Задаётся период, за который выводятся все пользователи с агрегированием их действий по датам. Необходимо ещё, чтобы у каждого пользователя выводились все даты за определённый период, даже если не было никаких действий. Каким образом лучше добавить недостающие записи?
6 июн 13, 15:09    [14400264]     Ответить | Цитировать Сообщить модератору
 Re: Вывести все даты за период, даже без событий  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
заведите в базе таблицу-календарь
6 июн 13, 15:11    [14400288]     Ответить | Цитировать Сообщить модератору
 Re: Вывести все даты за период, даже без событий  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
sunsunych
Задаётся период, за который выводятся все пользователи с агрегированием их действий по датам. Необходимо ещё, чтобы у каждого пользователя выводились все даты за определённый период, даже если не было никаких действий. Каким образом лучше добавить недостающие записи?

откуда выводятся пользователи и что агрегируется? Какие таблицы, какая структура, какие данные????? Вы сами перечитайте что вы написали...:(
6 июн 13, 15:11    [14400292]     Ответить | Цитировать Сообщить модератору
 Re: Вывести все даты за период, даже без событий  [new]
Гость333
Member

Откуда:
Сообщений: 3683
sunsunych
чтобы у каждого пользователя выводились все даты за определённый период, даже если не было никаких действий.

Замените в вашем запросе inner join на left outer join.
6 июн 13, 15:39    [14400503]     Ответить | Цитировать Сообщить модератору
 Re: Вывести все даты за период, даже без событий  [new]
sunsunych
Member

Откуда:
Сообщений: 8
Паганель, спасибо. Так и сделала пока. Но думала, может есть более оптимальные способы.
Гость333, left join не с чем делать, если не было записей с этой датой.
Сергей Викт. , вот подробно:
Пользователь выбирает период дат, к примеру, 2013-05-01 - 2013-05-26
Упрощённо, есть таблица с действиями: Оператор | Дата | Событие
Нужно вывести: Оператор | Дата | Кол-во событий типа 1 | Кол-во событий типа 2
Если в исходной таблице у оператора не было ни одного события за дату, к примеру, 2013-05-10, то и в результирующей у него не будет записи с этой датой.

Пока создала вспомогательную таблицу с датами от 2000-01-01 по 2020-12-12 и с ней делаю cross join операторов.
6 июн 13, 17:02    [14401250]     Ответить | Цитировать Сообщить модератору
 Re: Вывести все даты за период, даже без событий  [new]
iap
Member

Откуда: Москва
Сообщений: 47065
sunsunych
Паганель, спасибо. Так и сделала пока. Но думала, может есть более оптимальные способы.
Гость333, left join не с чем делать, если не было записей с этой датой.
Сергей Викт. , вот подробно:
Пользователь выбирает период дат, к примеру, 2013-05-01 - 2013-05-26
Упрощённо, есть таблица с действиями: Оператор | Дата | Событие
Нужно вывести: Оператор | Дата | Кол-во событий типа 1 | Кол-во событий типа 2
Если в исходной таблице у оператора не было ни одного события за дату, к примеру, 2013-05-10, то и в результирующей у него не будет записи с этой датой.

Пока создала вспомогательную таблицу с датами от 2000-01-01 по 2020-12-12 и с ней делаю cross join операторов.
Какой ещё CROSS JOIN ???
Сказали же уже - LEFT JOIN !

А способ этот - самый оптимальный из всех возможных.

Всё-таки, нельзя женщин допускать до программирования!
6 июн 13, 17:13    [14401308]     Ответить | Цитировать Сообщить модератору
 Re: Вывести все даты за период, даже без событий  [new]
барсук дроздович
Guest
до кучи outer apply
6 июн 13, 17:20    [14401350]     Ответить | Цитировать Сообщить модератору
 Re: Вывести все даты за период, даже без событий  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
sunsunych
Сергей Викт. , вот подробно:
Пользователь выбирает период дат, к примеру, 2013-05-01 - 2013-05-26
Упрощённо, есть таблица с действиями: Оператор | Дата | Событие
Нужно вывести: Оператор | Дата | Кол-во событий типа 1 | Кол-во событий типа 2
Если в исходной таблице у оператора не было ни одного события за дату, к примеру, 2013-05-10, то и в результирующей у него не будет записи с этой датой.

Пока создала вспомогательную таблицу с датами от 2000-01-01 по 2020-12-12 и с ней делаю cross join операторов.

Вам уже ответили. Делаете Left JOIN с вашей вспомогательной табличкой и ISNULL(кол-во событий, 0)
6 июн 13, 17:23    [14401367]     Ответить | Цитировать Сообщить модератору
 Re: Вывести все даты за период, даже без событий  [new]
sunsunych
Member

Откуда:
Сообщений: 8
Всем спасибо! Всё получилось.
Без cross join никак нельзя, т.к. нужно каждому оператору поставить в соответствие каждую дату периода.
И результат уже left join к посчитанным агрегатам.
6 июн 13, 18:51    [14401780]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить