В настоящее время я использую MS Sql2000, хотя мы обсуждаем его обновление до 2005 года (если это влияет на что-либо, я предполагаю, что это довольно стандартный SQL, Мне нужно)Создание хранимой процедуры SQL для агрегирования данных из нескольких таблиц для создания отчета о конце месяца
Один из наших продуктов Треки Продажа различных отделов по всей стране. В настоящее время я запускаю 3 Почти идентичные хранимые процедуры в Query Analyzer, а затем скопируйте результаты в excel и потратьте час, обрабатывая все это на одной электронной таблице.
Что бы я хотел сделать, это придумать решение для объединения всех моих хранимых процедур, чтобы в итоге я получил единый комбинированный набор данных, который я могу просто перечислить заинтересованным сторонам.
Решение, которое я начал придумывать, включало временную таблицу, в которой я бы сначала потянул все сайты, а затем, в свою очередь, обновил ее с результатами каждого из запросов, которые я сейчас запускаю самостоятельно, но я попал в всевозможные неприятности, поэтому я решил лучше начать заново, и попросить руководство и помощь.
SQL является своего рода перефразировать так, пожалуйста, не забрать меня на простых синтаксических ошибок :-)
А много упрощенный набор данных будет; таблица сайта { идентификатор, расположение}
table salesEnquiry {siteId, custoemrId,
DepositDate, BalancePaidDate, Status}
--Status can be (0,1,2,3 for not started, deposit, completed,cancelled
И от этого, я имею в виду вдоль линий;
--Set up the Whole Table
declare @tmp TABLE (id, Site, Deposits, Completed, Cancelled)
insert into @tmp (id, site)
select id, site from site
update @tmp
set Deposits = (select count(customerId) from salesEnquiry
where DepositPaidDate >= @startOfMonth and DepositPaidDate <= @endOfMonth and status = 1)
** This is the point I get lost I think, as Im not sure how to relate total number of deposits taken against the tmpId's as not all departments will take a deposit each month.
Я бы повторил вышеприведенную методологию для завершенных и отмененных клиентов, поэтому у меня есть итоговый стол, как показано ниже.
SiteId Location TotalDeposits TotalCompleted TotalCancelled
1 a 3 0 1
2 b 0 0 0
3 c 1 17 0
отредактировано для добавления выборочных данных + Результат. ** Извините, не могу фигурировать форматирование **
Хорошо, надеюсь, это поможет. сайт идентификатор местоположения 1 а 2 б 3 с
salesEnquiry
id custId deposit complete status
1 1 10/05/2011 null 1
2 2 11/04/2011 11/05/2011 2
1 3 12/05/2011 null 1
1 4 13/05/2011 13/05/2011 2
3 5 14/05/2011 null 3
3 6 13/02/2011 13/05/2011 3
даст
SiteId Location Deposits Completed Cancelled
1 a 2 1 0
2 b 0 1 0
3 c 0 0 2
SOrry, и т. Д. Предназначалось для обозначения еще нескольких рядов результатов. – Matt
Gotcha. Тогда я думаю, что вышесказанное даст вам то, что вам нужно. Сообщите мне, если вы не получите правильные результаты или вам нужно объяснить, как работает запрос. –
Проблема с ответом, который у вас есть, (по моей вине я должен был объяснить больше), состоит в том, что заполненные случаи должны отслеживать завершенную дату, поэтому я могу видеть те, которые только взяли депозит в месяц, и те, которые приняли завершение оплата отдельно.Принимая во внимание, что аннулированный может быть депозитом или завершен в течение этого месяца. Подпробовал не дал правильную информацию, как если бы я пытался вернуть идентификатор, а также счетчик, я получаю сообщение об ошибке, поэтому я не могу видеть, как связать набор результатов с тем, что их id не выполняет цикл for – Matt