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

  • Автор темы Tyngus
  • Дата начала
Статус
Закрыто для дальнейших ответов.
T

Tyngus

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

jaunty

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

Tyngus

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

%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 запросом?
 
J

jaunty

#4
Таблица Restdep действительно лишняя. Создана для более быстрого доступа к остаткам. Но тут есть загвоздка.
выиграл в скорости потерял в целостности
По разным причинам таблицы портятся ( аппаратные ошибки -транзакции не поддерживаются и пр.)
это вообще безобразие

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

'CodeIn'; String; 7; False /Еще один код товара, генерируется каждый раз для данного товара (CodeGoods) если у товара изенилась ЦенаПрихода, Поставщик или СкладПрихода (CodeDepot в тбл. ADDWBILL. Т.е. на складах существуют товары с одинаковым Code но разным CodeIn/ !!!!! Вот тут -то у меня и проблемы./
наконец-то заметил и понял в чем вопрос
веди их как новые товары - вопрос сразу отпадает

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

Tyngus

#5
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)
 
M
#6
Есть база Interbase такой структуры:

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

jaunty

#7
Код:
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);
а второй вопрос нефига не понял
если вообще первый понял ;)
 
G

Guest

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

optim@mail.cmk.ru
Мой дом :D
 
Статус
Закрыто для дальнейших ответов.