Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
sunsunych Member Откуда: Сообщений: 8 |
Задаётся период, за который выводятся все пользователи с агрегированием их действий по датам. Необходимо ещё, чтобы у каждого пользователя выводились все даты за определённый период, даже если не было никаких действий. Каким образом лучше добавить недостающие записи? |
6 июн 13, 15:09 [14400264] Ответить | Цитировать Сообщить модератору |
Паганель Member Откуда: Винница Сообщений: 22550 |
заведите в базе таблицу-календарь |
6 июн 13, 15:11 [14400288] Ответить | Цитировать Сообщить модератору |
Сергей Викт. Member Откуда: Москва Сообщений: 888 |
откуда выводятся пользователи и что агрегируется? Какие таблицы, какая структура, какие данные????? Вы сами перечитайте что вы написали...:( |
||
6 июн 13, 15:11 [14400292] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Замените в вашем запросе inner join на left outer join. |
||
6 июн 13, 15:39 [14400503] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47065 |
![]() Сказали же уже - LEFT JOIN ! А способ этот - самый оптимальный из всех возможных. Всё-таки, нельзя женщин допускать до программирования! |
||
6 июн 13, 17:13 [14401308] Ответить | Цитировать Сообщить модератору |
барсук дроздович
Guest |
до кучи outer apply |
6 июн 13, 17:20 [14401350] Ответить | Цитировать Сообщить модератору |
Сергей Викт. Member Откуда: Москва Сообщений: 888 |
Вам уже ответили. Делаете Left JOIN с вашей вспомогательной табличкой и ISNULL(кол-во событий, 0) |
||
6 июн 13, 17:23 [14401367] Ответить | Цитировать Сообщить модератору |
sunsunych Member Откуда: Сообщений: 8 |
Всем спасибо! Всё получилось. Без cross join никак нельзя, т.к. нужно каждому оператору поставить в соответствие каждую дату периода. И результат уже left join к посчитанным агрегатам. |
6 июн 13, 18:51 [14401780] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |