![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Агрегатные функции со строками AVG(), min(),max()... [D6, FireBird SS 1.5 win]
DSKalugin © (2004-08-02 15:55:00)Есть таблица №1 состояний продукции на складе со значениями
не заказана,
заказана,
поступила,
продана,
нет на складе(не поступила на склад от поставщиков).
таблица заказов №2, одним из полей в которой фигурирует состояние заказа со значением из табл №1
представление №3 которое выводит список заказов из таблицы №2
(групировка по основным полям табл №2)
проблема в том, что наряду с товаром "продана" и "поступила" в заказе могут быть детали с сост. "нет на складе", и тогда операция GROUP BY ..., "Состояние", ...возвращает 2е строчки. А нужна одна. Сначала я в этом представлении указал
Where "Состояние"<>'нет на складе'
но попался такой заказ, который содержал одну непоступившую (сост ='нет на складе')позицию. Из-за чего заказ не попал в список заказов (предст №3)
Агрегатные функции со строками AVG(), min(),max() не проходят.
Как решить эту задачу если в списке заказов должны быть показаны все заказы, но при этом не дублировались состояния?
DSKalugin (2004-08-02 18:26:00) [1]решена, спасибо Johnmen, Sandman25 и ZHK :-)))
Johnmen (2004-08-02 17:12:00) [2]>DSKalugin © (02.08.04 17:03) [11]
>только признаки.
Так я и спрашивал, чьи они ?
>MIN() заработал как надо!
Т.е. задача решена ?
ZHK (2004-08-02 17:06:00) [3]
> Johnmen © (02.08.04 16:54) [10]
> AVG для символьных полей - это сильно...:)
Гы. :-) Да и правда сильно. Видимо о женщинах думал, а не о функциях. :-)
DSKalugin (2004-08-02 17:03:00) [4]2 Johnmen © (02.08.04 16:41) [6]
только признаки. Структуру см выше в [4]
"detail_position_book"
> AVG для символьных полей - это сильно...:)
ООООооо спасибо!!! Я тормоз, признаю :-)))))))))))
Пробовал именно эту функцию, IBExpert ругнулся и я поспешно сделал выводы о неприемлимости такого рода операций над строками.
MIN() заработал как надо! Спасибо :-))))
Johnmen (2004-08-02 16:54:00) [5]AVG для символьных полей - это сильно...:)
ZHK (2004-08-02 16:50:00) [6]
> Sandman25 © (02.08.04 16:43) [7]
> [5] DSKalugin © (02.08.04 16:40)
>
> Над строчными типами агрегатные функции не выполняются
>
> Попробуйте, будете удивлены.
Да, выполняются, аж за ушами свистит. Я базу веду, там значения только строчные. Работают... И денег не просят. И Min и Max и Avg... Все пробовал. Лично.
Соловьев (2004-08-02 16:46:00) [7]
> Над строчными типами агрегатные функции не выполняются
count :)
Sandman25 (2004-08-02 16:43:00) [8][5] DSKalugin © (02.08.04 16:40)
Над строчными типами агрегатные функции не выполняются
Попробуйте, будете удивлены.
Johnmen (2004-08-02 16:41:00) [9]Теперь надо определиться, что есть т.№1. Это признаки заказа ?
Или/и чего-то ещё ?
DSKalugin (2004-08-02 16:40:00) [10]>а если есть разные заказы но с одинаковвым состоянием?
будут 2 строчки в списке заказов.
Список заказов "inp_ZakList" на то и есть, чтобы отображать список заказов. Он строится на основе таблицы заказов "opt_ICars" в которой хранится начинка=содержимое заказов (товар, кол-во , цена, дата, номер, клиент, поставщик...)
>max("состояние"). это бы сработало, если бы состояние было численным значением, а так я его вывожу в строчном. Над строчными типами агрегатные функции не выполняются
DSKalugin (2004-08-02 16:33:00) [11]таб №1 состояния
CREATE TABLE "detail_position_book" (
"cod" INTEGER NOT NULL,
"position" VARCHAR(20) NOT NULL
);
таб №2 заказы
CREATE TABLE "opt_ICars" (
"cod" INTEGER NOT NULL,
"FDate" DATE,
"ID_seller" INTEGER,
"seller_number" VARCHAR(30), (имя товара)
"sell_orig_ID" VARCHAR(10),
"ZCount" SMALLINT,
"SPrice" NUMERIC(15,5),
"SCount" VARCHAR(5),
"PostCnt" SMALLINT default 0 NOT NULL,
"skl_cod" VARCHAR(30),
"maker_name" VARCHAR(30),
"skl_ID" INTEGER,
"ID_dnb" INTEGER,
"id_client" INTEGER NOT NULL,
"manager" INTEGER,
"condition" INTEGER,
"input_No" INTEGER,
"output_No" INTEGER,
"info_plus" VARCHAR(59),
"SendDate" DATE,
"nacenka" NUMERIC(10,5),
"ZamovNo" INTEGER default 0 NOT NULL,
"PostPrice" NUMERIC(15,5) default 0 NOT NULL
);
таб №3 представление со списком заказов
CREATE VIEW "inp_ZakList"(
"inDate",
"seller",
"input_No",
"client_short",
"Nacenka",
"SendDate",
"output_No",
"condition")
AS
SELECT "opt_ICars"."FDate", (дата)
"detail_sellers_book"."ds_name", (имя поставщика)
"opt_ICars"."input_No", (входящий номер)
"FirmsAttributes"."ShortName", (имя клиента)
"opt_ICars"."nacenka",
"opt_ICars"."SendDate",
"opt_ICars"."output_No",
"detail_position_book"."position"
FROM "opt_ICars"
INNER JOIN "detail_sellers_book" ON ("opt_ICars"."ID_seller" = "detail_sellers_book"."cod")
INNER JOIN "FirmsAttributes" ON ("opt_ICars"."id_client" = "FirmsAttributes"."f_ID")
inner join "detail_position_book" on (("detail_position_book"."cod" = "opt_ICars"."condition") and ("opt_ICars"."condition"<>10))
group by "opt_ICars"."FDate",
"detail_sellers_book"."ds_name",
"opt_ICars"."input_No",
"FirmsAttributes"."ShortName",
"opt_ICars"."nacenka",
"opt_ICars"."SendDate",
"opt_ICars"."output_No",
"detail_position_book"."position";
Sandman25 (2004-08-02 16:03:00) [12]Убрать "состояние" из group by, заменить его в select на max("состояние").
А, по-хорошему, именно 2 заказа и нужно отображать.
stud (2004-08-02 16:01:00) [13]
> в списке заказов должны быть показаны все заказы, но при
> этом не дублировались состояния
а если есть разные заказы но с одинаковвым состоянием?
Johnmen (2004-08-02 16:00:00) [14]Много неясностей....
Приведи хотя бы запрос.