Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Кол-во записей или как сделать 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо