я следующий набор данных:Collapse и суммировать отсчеты в пределах группы по
SalesPerson PackageHistoryID PackageID SalesPersonID EnrollmentAmount PackageType
-------------------------------------------------------------------------------------------
Jim Jones 2895 310 59019 27.15 New Member
Jim Jones 2895 310 59019 53.21 New Member
Jim Jones 2895 310 59019 42.35 New Member
Jim Jones 2916 221 59019 379.01 Renewal
Jim Jones 2932 326 59019 53.21 New Member
Jim Jones 2932 326 59019 27.15 New Member
Jim Jones 2933 326 59019 53.21 Renewal
Jim Jones 2933 326 59019 27.15 Renewal
Upon этого набора данных я запускаю следующий запрос:
select Salesperson, PackageType, count(*) AS Packages, sum(EnrollmentAmount) AS Enrollment
from Sales2
group by SalesPerson, PackageType
order by SalesPerson, PackageType
... и я получаю эти результаты :
Salesperson PackageType Packages Enrollment
----------------------------------------------------
Jim Jones New Member 5 203.07
Jim Jones Renewal 3 459.37
Мои конечные результаты, как показано выше, почти идеальны. Единственная проблема - это подсчеты в столбце Packages
. Вместо 5 и 3 подсчеты должны быть 2 и 2, потому что я хочу, чтобы он указывал количество PackageTypes на PackageHistoryID, а не на EnrollmentAmount. Я хочу, чтобы данные EnrollmentAmounts суммировались, чтобы записи могли быть сжаты, так что PackageHistoryID никогда не повторяется. Первый показанный набор данных показывает соотношение 1-много между документами PackageHistory и EnrollmentAmount. Я думал, что мой второй запрос (группа по) будет правильно агрегировать это, но вы можете видеть, что это показывает, 8 всего PackageHistories, когда это действительно необходимо показать только 4.
Вот как конечный набор результат должен выглядеть:
Salesperson PackageType Packages Enrollment
----------------------------------------------------
Jim Jones New Member 2 203.07
Jim Jones Renewal 2 459.37
2 и 2 указывают на то, что на самом деле в результирующем наборе действительно всего 4 записи PackageHistory; 2 являются новым членом и 2 являются обновлением. Записи нескольких записей EnrollmentAmount приводят к слишком большому количеству записей, и, следовательно, счетчики ошибочно расширяются в конечном запросе.
Важное примечание: Несмотря на то, что SalesPerson всегда является одним и тем же в показанных результатах, они иногда могут быть разными, хотя они будут одинаковыми для любой данной PackageHistory (1-1). Группировка должна быть (1) SalesPerson, затем (2) PackageType, и суммировать/сглаживать EnrollmentAmounts в каждой уникальной PackageHistory.
Какой запрос даст правильные результаты?
Просто пришли сюда, чтобы сказать то же самое, так что вы получите мою +1 вместо :) – LittleBobbyTables
Георгиос, спасибо так много! Я делаю sql долгое время, но я не знал о count (отчетливый ...). Теперь это прекрасно! – HerrimanCoder
Также мне нравится ваше имя пользователя, LittleBobbyTables. Отличный мультфильм, тот! – HerrimanCoder