Форум: "Базы";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
ВнизАгрегатные функции со строками AVG(), min(),max()... Найти похожие ветки
← →
DSKalugin © (2004-08-02 15:55) [0]Есть таблица №1 состояний продукции на складе со значениями
не заказана,
заказана,
поступила,
продана,
нет на складе(не поступила на склад от поставщиков).
таблица заказов №2, одним из полей в которой фигурирует состояние заказа со значением из табл №1
представление №3 которое выводит список заказов из таблицы №2
(групировка по основным полям табл №2)
проблема в том, что наряду с товаром "продана" и "поступила" в заказе могут быть детали с сост. "нет на складе", и тогда операция GROUP BY ..., "Состояние", ... возвращает 2е строчки. А нужна одна. Сначала я в этом представлении указал
Where "Состояние"<>"нет на складе"
но попался такой заказ, который содержал одну непоступившую (сост ="нет на складе")позицию. Из-за чего заказ не попал в список заказов (предст №3)
Агрегатные функции со строками AVG(), min(),max() не проходят.
Как решить эту задачу если в списке заказов должны быть показаны все заказы, но при этом не дублировались состояния?
← →
Johnmen © (2004-08-02 16:00) [1]Много неясностей....
Приведи хотя бы запрос.
← →
stud (2004-08-02 16:01) [2]
> в списке заказов должны быть показаны все заказы, но при
> этом не дублировались состояния
а если есть разные заказы но с одинаковвым состоянием?
← →
Sandman25 © (2004-08-02 16:03) [3]Убрать "состояние" из group by, заменить его в select на max("состояние").
А, по-хорошему, именно 2 заказа и нужно отображать.
← →
DSKalugin © (2004-08-02 16:33) [4]таб №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";
← →
DSKalugin © (2004-08-02 16:40) [5]>а если есть разные заказы но с одинаковвым состоянием?
будут 2 строчки в списке заказов.
Список заказов "inp_ZakList" на то и есть, чтобы отображать список заказов. Он строится на основе таблицы заказов "opt_ICars" в которой хранится начинка=содержимое заказов (товар, кол-во , цена, дата, номер, клиент, поставщик...)
>max("состояние"). это бы сработало, если бы состояние было численным значением, а так я его вывожу в строчном. Над строчными типами агрегатные функции не выполняются
← →
Johnmen © (2004-08-02 16:41) [6]Теперь надо определиться, что есть т.№1. Это признаки заказа ?
Или/и чего-то ещё ?
← →
Sandman25 © (2004-08-02 16:43) [7][5] DSKalugin © (02.08.04 16:40)
Над строчными типами агрегатные функции не выполняются
Попробуйте, будете удивлены.
← →
Соловьев © (2004-08-02 16:46) [8]
> Над строчными типами агрегатные функции не выполняются
count :)
← →
ZHK (2004-08-02 16:50) [9]
> Sandman25 © (02.08.04 16:43) [7]
> [5] DSKalugin © (02.08.04 16:40)
>
> Над строчными типами агрегатные функции не выполняются
>
> Попробуйте, будете удивлены.
Да, выполняются, аж за ушами свистит. Я базу веду, там значения только строчные. Работают... И денег не просят. И Min и Max и Avg... Все пробовал. Лично.
← →
Johnmen © (2004-08-02 16:54) [10]AVG для символьных полей - это сильно...:)
← →
DSKalugin © (2004-08-02 17:03) [11]2 Johnmen © (02.08.04 16:41) [6]
только признаки. Структуру см выше в [4]
"detail_position_book"
> AVG для символьных полей - это сильно...:)
ООООооо спасибо!!! Я тормоз, признаю :-)))))))))))
Пробовал именно эту функцию, IBExpert ругнулся и я поспешно сделал выводы о неприемлимости такого рода операций над строками.
MIN() заработал как надо! Спасибо :-))))
← →
ZHK (2004-08-02 17:06) [12]
> Johnmen © (02.08.04 16:54) [10]
> AVG для символьных полей - это сильно...:)
Гы. :-) Да и правда сильно. Видимо о женщинах думал, а не о функциях. :-)
← →
Johnmen © (2004-08-02 17:12) [13]>DSKalugin © (02.08.04 17:03) [11]
>только признаки.
Так я и спрашивал, чьи они ?
>MIN() заработал как надо!
Т.е. задача решена ?
← →
DSKalugin © (2004-08-02 18:26) [14]решена, спасибо Johnmen, Sandman25 и ZHK :-)))
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.024 c