Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.29;
Скачать: CL | DM;

Вниз

Агрегатные функции со строками 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.029 c
8-1086699491
Ruslan
2004-06-08 16:58
2004.08.29
Формат IMA ADPCM wav файла


14-1091853291
vidiv
2004-08-07 08:34
2004.08.29
Лицензионное ПО


4-1089908217
BaG
2004-07-15 20:16
2004.08.29
Как получить доступ к памяти любого процесса в системе?


14-1092275016
Думкин
2004-08-12 05:43
2004.08.29
С днем рождения! 12 августа


14-1092313450
Nikolay M.
2004-08-12 16:24
2004.08.29
Письма от БрейнБенча