выражение:
count(BIDdetails.Origin)
просто подсчитывает число ненулевых значений BIDdetails.Origin
в каждой группе. Поскольку вы фактически группируете по полю, это будет количество строк в каждой группе.
Вы можете получить то, что хотите в большинстве баз данных, используя count(distinct)
по уникальному идентификатору. Увы, MS Access не поддерживает count(distinct)
, поэтому такого запроса гораздо труднее написать в Access. Вы можете получить только count
поле, выполнив:
SELECT BIDdetails.Origin, BIDdetails.Destination, count(*) as NoOfShpt
FROM BIDdetails
where BIDdetails.OrgCountry <> 'AE' and BIDdetails.DestCountry='AE' and
BIDdetails.ClosingDate>=#" & dtpBIDfrom.Value & "# and BIDdetails.ClosingDate<=#" & dtpBIDto.Value & "#
GROUP BY BIDdetails.Origin, BIDdetails.Destination;
И затем суммируют результаты либо в приложении или путем присоединения этого запроса обратно в исходный.
EDIT:
Это ваш исходный запрос:
SELECT d.Origin, d.Destination,
Round(Sum(Dims.ChargeableWeight)) as CWeight, count(d.Origin) as NoOfShpt
FROM BIDdetails as d LEFT JOIN
DIMS
ON BidDetails.BID=Dims.BID
where d.OrgCountry <> 'AE' and d.DestCountry='AE' and
d.ClosingDate> = #" & d.Value & "# and d.ClosingDate<=#" & dtpBIDto.Value & "#
GROUP BY d.Origin, d.Destination
ORDER BY Round(Sum(Dims.ChargeableWeight)) DESC
Существует другой подход, при котором вы агрегировать сначала детали, а затем снова. Я думаю, что проще в этом случае:
SELECT Origin, Destination, SUM(CWeight) as CWeight, COUNT(*) as NumShip
FROM (SELECT d.id, d.Origin, d.Destination,
Round(Sum(Dims.ChargeableWeight)) as CWeight, count(d.Origin) as NoOfShpt
FROM BIDdetails as d LEFT JOIN
DIMS
ON BidDetails.BID = Dims.BID
where d.OrgCountry <> 'AE' and d.DestCountry='AE' and
d.ClosingDate> = #" & d.Value & "# and d.ClosingDate<=#" & dtpBIDto.Value & "#
GROUP BY d.id, d.Origin, d.Destination
) as d
GROUP BY Origin, Destination
ORDER BY Round(Sum(CWeight)) DESC;
d.id
относится к тому, что уникальный идентификатор для того, что вы хотите, чтобы сосчитать.
Поскольку, по-видимому, 'Dims' имеет несколько строк для каждой строки в' BIDetails', хотя вы не указали достаточно подробностей для нас, чтобы быть уверенными. Вам нужно предварительно агрегировать в подзапросе, если это так. Замечание: конкатенация - отличный способ внедрить SQL-инъекцию, вы должны использовать параметризованные запросы. –