Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.035 c
3-1091711961
Zabludshiy
2004-08-05 17:19
2004.08.29
Проблема с записью в BLOB-поле


4-1089814334
Dmitry
2004-07-14 18:12
2004.08.29
Пароль в dcomcnfg.exe


3-1091708708
natasha
2004-08-05 16:25
2004.08.29
Unicode в Delphi


4-1089376136
Дмитрий2004
2004-07-09 16:28
2004.08.29
Программа работающая под определенным пользователем


14-1091893299
Knight
2004-08-07 19:41
2004.08.29
Создания образов и восстановления HDD...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский