Помогите составить SQL запрос, pls.

Тема в разделе "SQL", создана пользователем Tyngus, 30 апр 2004.

Статус темы:
Закрыта.
  1. Tyngus

    Tyngus Гость

    Есть Таблица Прихода и Таблица Расхода нужна таблица остатков на складе.
     
  2. jaunty

    jaunty Гость

    для начала привел бы describe этих таблиц
    а вообще скорее всего эта таблица лишняя
    все завиист от конкретной ситуации
     
  3. Tyngus

    Tyngus Гость

    Вот структура таблиц:

    %Table ADDWGOOD.DB / Таблица прихода/
    type: Paradox
    %Fields
    'CodeBill'; Integer; 0; False /Номер документа; внешний ключ к таблице ADDWBIL(шапка документа)/
    'CodeGoods'; String; 5; False /Код товара; внешний ключ к справочнику товаров/
    'Np'; Smallint; 0; False /Номер позиции в данном документе/
    'Articul'; String; 16; False
    'Count'; Float; 0; False /Количество данного товара/
    'CostRub'; Currency; 0; False/ Соответтственно цены товара/
    'CostCur'; Currency; 0; False
    'NameCur'; String; 10; False
    'CursCur'; Currency; 0; False
    'CostEq'; Currency; 0; False
    'NameEq'; String; 10; False
    'CursEq'; Currency; 0; False
    'CodeIn'; String; 7; False /Еще один код товара, генерируется каждый раз для данного товара (CodeGoods) если у товара изенилась ЦенаПрихода, Поставщик или СкладПрихода (CodeDepot в тбл. ADDWBILL. Т.е. на складах существуют товары с одинаковым Code но разным CodeIn/ !!!!! Вот тут -то у меня и проблемы./
    'ClientArt'; String; 16; False
    'SummRub'; Currency; 0; False
    'Kof'; Float; 0; False
    'Temp'; String; 10; False
    'SellCostRub'; Currency; 0; False
    'SellCostCur'; Currency; 0; False
    'First'; Float; 0; False
    'Second'; Float; 0; False
    'Third'; Float; 0; False
    'OptCostRub'; Currency; 0; False
    'OptCostCur'; Currency; 0; False
    'BaseCost'; Currency; 0; False
    'FirstAdd'; Currency; 0; False
    'SecondAdd'; Currency; 0; False
    'CountDel'; Float; 0; False
    'Reserved'; Smallint; 0; False
    'InfoCart'; String; 40; False
    'NDSAmount'; Float; 0; False
    'NDSAmountCur'; Float; 0; False
    'MaxPers'; Float; 0; False
    'MinPers'; Float; 0; False
    %Indexes
    ''; 'CodeBill;Code;Np'; Primary+Unique
    'Codes'; 'Code;CodeIn';
    'CodeB'; 'CodeBill;Code;CodeIn';
    'Number'; 'CodeBill;Np';
    'CodeIn'; 'CodeIn';
    'CodeArt'; 'Code;Articul';

    %Table ALLSELLG.DB / Таблица расхода /
    type: Paradox
    %Fields
    'CodeDoc'; Integer; 0; False /Номер документа; внешний ключ к таблие SELLBILL -шапки документов
    'CodeGoods'; String; 5; False / Код товара; внешний к люч к справочнику товаров/
    'CodeIn'; String; 7; False /Тот самый (см. выше) уникальный код товара/
    'Code depot'; String; 3; False /Код склада, внешний ключ к справочнику складов/
    'Articul'; String; 16; False
    'CountAll'; Float; 0; False
    'CostRub'; Currency; 0; False
    'CostCur'; Currency; 0; False
    'NameCur'; String; 3; False
    'CostNDS'; Currency; 0; False
    'CountDel'; Currency; 0; False
    'CostNDSCur'; Currency; 0; False
    %Indexes
    ''; 'CodeDoc;CodeGoods;CodeIn;Code depot'; Primary+Unique

    %Table RESTDEP.DB
    type: Paradox
    %Fields
    'Code Depot'; String; 3; False /Код склада/
    'Code Goods'; String; 5; False /Код товара ; внешний ключ к справочнику товаров/
    'CodeIn'; String; 7; False /Уникальный Код (см. выше)товара с данным CodeGoods/
    'Date begin'; Date; 0; False /Даты, я не разобрался/
    'Date end'; Date; 0; False
    'Articul'; String; 16; False
    'CountAll'; Float; 0; False /Количество данного товара на складе/
    'CostRub'; Currency; 0; False
    'CostCur'; Currency; 0; False
    'CostEq'; Currency; 0; False
    'NameCur'; String; 10; False
    'NameEq'; String; 10; False
    'CursCur'; Currency; 0; False
    'CursEq'; Currency; 0; False
    'First'; Currency; 0; False
    'Second'; Currency; 0; False
    'Third'; Currency; 0; False
    'Checked'; Boolean; 0; False
    'SellCostRub'; Currency; 0; False
    'SellCostCur'; Currency; 0; False
    'ClientArt'; String; 16; False
    'OptCostRub'; Currency; 0; False
    'OptCostCur'; Currency; 0; False
    'CodeInFio'; Integer; 0; False
    %Indexes
    ''; 'Code Depot;Code Goods;CodeIn'; Primary+Unique
    'CodeCost'; 'Code Goods;CostRub';
    'CostCurKey'; 'Code Goods;CostCur';
    'Articul'; 'Articul';
    'CodeIn'; 'CodeIn';
    'ArtGood'; 'Code Goods;Articul';
    'ArtDep'; 'Code Depot;Code Goods;Articul';
    'CodeDate'; 'Code Depot;Code Goods;Date begin';
    'CodeInFio'; 'Code Depot;Code goods;CodeIn;CodeInFio';


    Таблица Restdep действительно лишняя. Создана для более быстрого доступа к остаткам. Но тут есть загвоздка.
    По разным причинам таблицы портятся ( аппаратные ошибки -транзакции не поддерживаются и пр.). Теперь представте себе испорчена таблица Прихода/Расхода, а таблица RESTDEP (наличие на складах) осталась прежней(она не строится каждый раз при подключении к Базе заново, а в нее добавляются записи приход/расход при внесении документов, соответственно с разными знаками в поле CountALL). Поэтому ошибки сразу и не видно.
    Приходит день и я делаю "Восстановление остатков на складе"(есть такая функция в опциях программы) О-О-О-пс! На складе неразбериха. Присутствуют позиции непонятно откуда взявшиеся, или отсутствуют. Я могу полностью очитстить Restdep(Empty). И с помощью "Восстановление остатков на складе" вывести остатки на данный момент. Как это сделать не с помощью функции, а SQL запросом?
     
  4. jaunty

    jaunty Гость

    выиграл в скорости потерял в целостности
    это вообще безобразие

    в целом насколько я понимаю принципиально неправильно спроектирована структура
    для склада непринципиальна скорость по крайней мере не до такой степени чтобы экономить на скорости запроса к одной таблице вместо двух
    а по-поводу SQL запроса
    Код (Text):
    SELECT (ADDWGOOD.Count-RESTDEP.CountAll) FROM ADDWGOOD,RESTDEP WHERE ADDWGOOD.CodeGoods=RESTDEP.CodeGoods
    что-то в этом духе
    по крайней мере в MySQL

    наконец-то заметил и понял в чем вопрос
    веди их как новые товары - вопрос сразу отпадает

    в общем надеюсь хоть чем-то помог
     
  5. Tyngus

    Tyngus Гость

    jaunty, спасибо. Не все так плохо. Буду думать далее.
    SELECT (A.Count-R.CountAll) FROM ADDWGOOD A,RESTDEP R
    WHERE A.CodeGoods=R.CodeGoods
    A.CodeIn=R.CodeIn
    A.CodeDepot=R.CodeDepot(хорошо бы было но поля CodeDepot в ADDWGOOD нет, оно есть только в ADDWBILL(ADDWGOOD.CodeBill=ADDWBILL.Code)
     
  6. mcs

    mcs Гость

    Есть база Interbase такой структуры:
    [​IMG]
    Помогите составить 2 запроса:
    1) fio участника --- страна --- количество его докладов
    2) название принятого доклада (date_of_report_acceptance IS NOT NULL) --- все его авторы (у каждой работы 1 или несколько авторов)
    Спасиюо.
     
  7. jaunty

    jaunty Гость

    Код (Text):
    SELECT count(report.report_id) FROM report, author, participant WHERE (author.participant_id=participiant.participant_id) AND (participiant.surname="нужная фамилия") AND (author.report_id=report.report_id);
    а второй вопрос нефига не понял
    если вообще первый понял ;)
     
  8. Guest

    Guest Гость

    Мужики, выручайте..
    В Delphi5...7 SQL запросы делаются элементарно, а вот в Delphi8 ещё требуется SQLConnection в свойстве LibraryName которого есть файл dbexpdb2.dll который делфи не находит... (тип БД - Paradox7)
    Как вообще нормальные люди делают элементарные SQL запросы в Delphi8?
    Заранее thanXX a lot..

    optim@mail.cmk.ru
    Мой дом :D
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей