Вниз
Скачать: CL | DM;

Подсчёт наименований   Найти похожие ветки 

← →
vitv ©   (2006-12-17 12:20) [0]

Есть таблица в которой храняться наименования:
плита
холодильник
утюг
плита
холодильник
утюг
Нужно посчитать сколько  каждого наименовния.
Так можно:
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
....
....
....


← →
sniknik ©   (2006-12-17 13:42) [1]

SELECT наименования, Count(*) FROM Есть таблица
GROUP BY наименования

p.s. таблица неправильная, если уж так повторяются названия то делают 2 таблицы, одну справочник имен (в ней может быть не только имя но и др. информация по типу товара) и вторую непосредственно по товарам где вместо названий ссылки на них. т.е. например номер 1, или 2, 3 т.д. а в справочнике имен записи с id 1 соответствует "плита", 2 - "холодильник" и т.д.
полную инфу о записи тогда получают обьеденением этих таблиц. кроме того что база будет меньше размером это еще и быстрее работает... + при ошибке в названии исправлять придется только в одном месте.
поищи в общем статьи про нормализацию баз.


← →
VitV ©   (2006-12-17 14:40) [2]

Сделал вот так:
select utug,count(utug) from tovary
group by utug
ругается на синтаксис(Интербэйс 6.1)


← →
Плохиш ©   (2006-12-17 15:35) [3]


> VitV ©   (17.12.06 14:40) [2]

> ругается на синтаксис(Интербэйс 6.1)

Значит пора уже прочитать о синтаксисе используемой бд...


← →
vitv ©   (2006-12-17 16:01) [4]

Уже читаю :)


← →
FIL-23 ©   (2006-12-17 16:56) [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) [6]

FIL-23 ©   (17.12.06 16:56) [5]
Никогда так не делаете (если ваш код кто-то когда-то может увидеть) и уж точно не советуйте так делать. Даже объяснять не буду почему - судя по всему, рано (или наоборот поздно)


← →
vitv ©   (2006-12-18 10:08) [7]


> я что то не могу понять ты чем пользуешься (таблица или
> массив)
>
> делается это так
>
> while not table1.eof do // пока не конец таблицы то...
> begin
> if table1.fieldbyname("tovar").asstring="utug" then utug:
> =utug+1;
> table1.next;
> end;
>
> в итоге тебе выведется количество твоих уьюгов.
> этот пример для делфяка (если ты конечно в нем пишишь :)
> )
>

Я хочу сделать хранимой процедурой.


← →
Sergey13 ©   (2006-12-18 10:12) [8]

> Я хочу сделать хранимой процедурой.

Если у тебя будет несколько сотен (тысяч) разных наименований - прикинь какова будет твоя процедура.
Тебе уже ответили в
> [1] sniknik ©   (17.12.06 13:42)


← →
VitV ©   (2006-12-20 12:29) [9]


> Никогда так не делаете (если ваш код кто-то когда-то может
> увидеть) и уж точно не советуйте так делать. Даже объяснять
> не буду почему - судя по всему, рано (или наоборот поздно)
>

Объясни, если не сложно.


← →
VitV ©   (2006-12-20 12:43) [10]

Я сделал как вы советывали, просто мне интересно почему :). Я думал сделать так, но мне что то  подсказывало, что это "не есть гуд" :)))


← →
Anatoly Podgoretsky ©   (2006-12-20 12:56) [11]

> VitV  (20.12.2006 12:43:10)  [10]

Читать книги по базам данных



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.029 c
15-1166435526
Сатир
2006-12-18 12:52
2007.01.07
Problem “J” - Concurrency Simulator


1-1163412485
SMAC
2006-11-13 13:08
2007.01.07
Bitmap.Canvas.CopyRect(MyRect2, Form1.Canvas, MyRect1);


15-1165628503
TUser
2006-12-09 04:41
2007.01.07
Не слабо кто-то обкурился ...


2-1166300436
Defort
2006-12-16 23:20
2007.01.07
Последняя надежда


2-1166347257
vitv
2006-12-17 12:20
2007.01.07
Подсчёт наименований




   Наверх