![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подсчёт наименований
vitv © (2006-12-17 12:20:00)Есть таблица в которой храняться наименования:
плита
холодильник
утюг
плита
холодильник
утюг
Нужно посчитать сколько каждого наименовния.
Так можно:
create procedure my_proc returns(mytovar string,utug integer, plita integer......)
as
begin
for select tovar from table
into :mytovar
do
begin
if (mytovar='утюг') then utug=+1
....
....
....
Anatoly Podgoretsky (2006-12-20 12:56:00) [1]> VitV (20.12.2006 12:43:10) [10]
Читать книги по базам данных
VitV (2006-12-20 12:43:00) [2]Я сделал как вы советывали, просто мне интересно почему :). Я думал сделать так, но мне что то подсказывало, что это "не есть гуд" :)))
VitV (2006-12-20 12:29:00) [3]
> Никогда так не делаете (если ваш код кто-то когда-то может
> увидеть) и уж точно не советуйте так делать. Даже объяснять
> не буду почему - судя по всему, рано (или наоборот поздно)
>
Объясни, если не сложно.
Sergey13 (2006-12-18 10:12:00) [4]> Я хочу сделать хранимой процедурой.
Если у тебя будет несколько сотен (тысяч) разных наименований - прикинь какова будет твоя процедура.
Тебе уже ответили в
> [1] sniknik © (17.12.06 13:42)
vitv (2006-12-18 10:08:00) [5]
> я что то не могу понять ты чем пользуешься (таблица или
> массив)
>
> делается это так
>
> while not table1.eof do // пока не конец таблицы то...
> begin
> if table1.fieldbyname('tovar').asstring='utug' then utug:
> =utug+1;
> table1.next;
> end;
>
> в итоге тебе выведется количество твоих уьюгов.
> этот пример для делфяка (если ты конечно в нем пишишь :)
> )
>
Я хочу сделать хранимой процедурой.
Sergey Masloff (2006-12-17 17:47:00) [6]FIL-23 © (17.12.06 16:56) [5]
Никогда так не делаете (если ваш код кто-то когда-то может увидеть) и уж точно не советуйте так делать. Даже объяснять не буду почему - судя по всему, рано (или наоборот поздно)
FIL-23 (2006-12-17 16:56:00) [7]я что то не могу понять ты чем пользуешься (таблица или массив)
делается это так
while not table1.eof do // пока не конец таблицы то...
begin
if table1.fieldbyname('tovar').asstring='utug' then utug:=utug+1;
table1.next;
end;
в итоге тебе выведется количество твоих уьюгов.
этот пример для делфяка (если ты конечно в нем пишишь :) )
vitv (2006-12-17 16:01:00) [8]Уже читаю :)
Плохиш (2006-12-17 15:35:00) [9]
> VitV © (17.12.06 14:40) [2]
> ругается на синтаксис(Интербэйс 6.1)
Значит пора уже прочитать о синтаксисе используемой бд...
VitV (2006-12-17 14:40:00) [10]Сделал вот так:
select utug,count(utug) from tovary
group by utug
ругается на синтаксис(Интербэйс 6.1)
sniknik (2006-12-17 13:42:00) [11]SELECT наименования, Count(*) FROM Есть таблица
GROUP BY наименования
p.s. таблица неправильная, если уж так повторяются названия то делают 2 таблицы, одну справочник имен (в ней может быть не только имя но и др. информация по типу товара) и вторую непосредственно по товарам где вместо названий ссылки на них. т.е. например номер 1, или 2, 3 т.д. а в справочнике имен записи с id 1 соответствует "плита", 2 - "холодильник" и т.д.
полную инфу о записи тогда получают обьеденением этих таблиц. кроме того что база будет меньше размером это еще и быстрее работает... + при ошибке в названии исправлять придется только в одном месте.
поищи в общем статьи про нормализацию баз.