![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Кол-во записей или как сделать count (select * ...)? [D6, FireBird]
off © (2004-02-17 11:39:00)
Доброго времени суток, уважаемые мастера. Передо мной стоит задача из книги покупок сосчитать какое колво клиентов закупалось в опред. период в опред. отделе. Для этого пишем нехитрый SQL запрос
Select nd.codenach from nachdec ND
where
(ND.codetypelgot = :codetypelgot)
and
(ND.frdate >= :frdate)
and
(ND.todate <= :todate)
group by ND.codenach
Врезультате получим 8 записей, но это я в ручную считаю, что 8, а как это сделать программно?
Guest (2004-02-17 12:54:00) [1]
Я не против :)
Карелин Артем (2004-02-17 12:52:00) [2]
Guest (17.02.04 12:50) [17]
У меня сегодня первый рабочий день в неделе. Будем считать его понедельником. :)
Guest (2004-02-17 12:50:00) [3]
Бывает. Но только сегодня вторник :)
off (2004-02-17 12:44:00) [4]
to [15]:
Моё почтение. Молодец. Видимо сегодня действительно понедельник и я совсем про DISTINCTзабыл :-)
Guest (2004-02-17 12:26:00) [5]
select count(distinct codenach)
from ...
не подходит?
off (2004-02-17 12:16:00) [6]
to [10]:
В том то и дело, что не одна строка, а несколько может быть
Карелин Артем (2004-02-17 12:15:00) [7]
Извиняюсь за прогон, не сразу вкурил в ТЗ.
Плохиш (2004-02-17 12:13:00) [8]
Врезультате получим 8 записей, но это я в ручную считаю, что 8, а как это сделать программно?
Если надо получить число 8, то убери в [2] group by ...
off (2004-02-17 12:10:00) [9]
to [7]:
А что делать тем у кого FIBMinus и всем прочим?
Карелин Артем (2004-02-17 12:09:00) [10]
Если codenach уникально для каждого клиента, а каждая строка означает одну покупку, то
Select codenach, count(codenach) from nachdec ND
where
(ND.codetypelgot = :codetypelgot)
and
(ND.frdate >= :frdate)
and
(ND.todate <= :todate)
group by ND.codenach
Exciter (2004-02-17 12:09:00) [11]
Передо мной стоит задача из книги покупок сосчитать какое колво клиентов закупалось в опред. период в опред. отделе
см. panov
или группировку не по одному полю сделай.
off (2004-02-17 12:03:00) [12]
to [6]
В общем то ничего интересного
frdate - дата начала закупок
todate - дата окончания закупок
codetypelgot - база, отдел (где произведена покупка)
codenach - заводится для каждой закуки клиента
codedec - заводится для каждого типа товара
Есть еще куча несущественных для данного вопроса полей типа суммы и количество товара
Соловьев (2004-02-17 11:59:00) [13]
если юзать FIBPlus , то там есть метод RecordCountFromSrv
Карелин Артем (2004-02-17 11:49:00) [14]
А нормально расписать что к чему в базе слабо?
Reindeer Moss Eater (2004-02-17 11:48:00) [15]
Select nd.codenach from nachdec ND
where
(ND.codetypelgot = :codetypelgot)
and
(ND.frdate >= :frdate)
and
(ND.todate <= :todate)
group by ND.codenach
Врезультате получим 8 записей, но это я в ручную считаю, что 8, а как это сделать программно?
Сильно сомневаюсь, что получим больше одной записи при таком запросе.
off (2004-02-17 11:47:00) [16]
re [2]:
Дело в том что человек мог совершать не одну покупку, немного поясню (ND.codetypelgot - отдел, ND.codenach - код покупателя)
А так как у каждого покупателя он свой, то в результате вылазят все теже 8 строчек с количеством купленного товара по каждому покупателю :-)
Reindeer Moss Eater (2004-02-17 11:47:00) [17]
Select nd.codenach from nachdec ND
where
(ND.codetypelgot = :codetypelgot)
and
(ND.frdate >= :frdate)
and
(ND.todate <= :todate)
group by ND.codenach
Reindeer Moss Eater (2004-02-17 11:42:00) [18]
Врезультате получим 8 записей, но это я в ручную считаю, что 8, а как это сделать программно?
Result:=0;
while not eof do
begin
Inc(Result);
Next;
end;
panov (2004-02-17 11:42:00) [19]
Select COUNT(*)from nachdec ND
where
(ND.codetypelgot = :codetypelgot)
and
(ND.frdate >= :frdate)
and
(ND.todate <= :todate)
group by ND.codenach