Вопрос по запросу SQL
Модераторы: m0p3e, edward_K, Модераторы
Вопрос по запросу SQL
Добрый день. Задача состоит в том, чтобы выбрать все приходы от контрагентов с учетом счетов, субсчетов дебита/кредита. Написали запрос в SQL, но почему-то выгружаются только данные по 1-му счету 201.10, а по остальным нехочет:
select katmol.kod,katpodr.kod,katorg.name,katsopr.nsopr,BASEDOC.NODOC, sklorder.norder,katpodr.name,OBOROT.DBSCHETO,OBOROT.SUBOSSCH,oborot.krschetk,
katmc.name, katmc.barkod, kated.abbr, sporder.kol,oborot.kol,oborot.sumob, katmc.cenamc,SPORDER.RSRPRICE,spsopr.price
from oborot, katmc, katsopr, sporder, soprhoz, spsopr, katpodr,katorg,sklorder,kated, katmol,spstep,stepdoc,basedoc
where
((Date(4,1,2010)==katsopr.dopr and
katsopr.nrec==spsopr.csopr and
spsopr.nrec==sporder.cspsopr and
word(101)==soprhoz.tidkgal and
katsopr.nrec/==soprhoz.csoprdoc and
katsopr.corg /== katorg.nrec and
katsopr.CPODRTO == katpodr.nrec and
katsopr.nrec == sklorder.csopr and
sklorder.cmol == katmol.nrec and
soprhoz.nrec/==oborot.csoprhoz and
katsopr.cstepdoc == spstep.nrec and
spstep.CSTEPDOC == stepdoc.nrec and
stepdoc.cbasedoc == basedoc.nrec and
oborot.ced == kated.nrec and
spsopr.cmcusl == oborot.kauos[4](noindex) and
oborot.kauos[4]==katmc.nrec ));
В чем тут загвоздка? Или подскажите, пожалуйста, как вообще решить такую задачу, никогда еще с проводками не работали.
select katmol.kod,katpodr.kod,katorg.name,katsopr.nsopr,BASEDOC.NODOC, sklorder.norder,katpodr.name,OBOROT.DBSCHETO,OBOROT.SUBOSSCH,oborot.krschetk,
katmc.name, katmc.barkod, kated.abbr, sporder.kol,oborot.kol,oborot.sumob, katmc.cenamc,SPORDER.RSRPRICE,spsopr.price
from oborot, katmc, katsopr, sporder, soprhoz, spsopr, katpodr,katorg,sklorder,kated, katmol,spstep,stepdoc,basedoc
where
((Date(4,1,2010)==katsopr.dopr and
katsopr.nrec==spsopr.csopr and
spsopr.nrec==sporder.cspsopr and
word(101)==soprhoz.tidkgal and
katsopr.nrec/==soprhoz.csoprdoc and
katsopr.corg /== katorg.nrec and
katsopr.CPODRTO == katpodr.nrec and
katsopr.nrec == sklorder.csopr and
sklorder.cmol == katmol.nrec and
soprhoz.nrec/==oborot.csoprhoz and
katsopr.cstepdoc == spstep.nrec and
spstep.CSTEPDOC == stepdoc.nrec and
stepdoc.cbasedoc == basedoc.nrec and
oborot.ced == kated.nrec and
spsopr.cmcusl == oborot.kauos[4](noindex) and
oborot.kauos[4]==katmc.nrec ));
В чем тут загвоздка? Или подскажите, пожалуйста, как вообще решить такую задачу, никогда еще с проводками не работали.
-
- Местный житель
- Сообщения: 2898
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
э... а почему бы запрос не построить напрямую от проводок?
проводки надо фильтровать по плану счетов. ну да ладно
не верно
katsopr.cstepdoc == spstep.nrec
верно
katsopr.cstepdoc == stepdoc.nrec
and stepdoc.cbasedoc == basedoc.nrec
только на фига вам ДО?
и вообще, я что-то с трудом понимаю, что должен делать запрос?
проводки надо фильтровать по плану счетов. ну да ладно
не верно
katsopr.cstepdoc == spstep.nrec
верно
katsopr.cstepdoc == stepdoc.nrec
and stepdoc.cbasedoc == basedoc.nrec
только на фига вам ДО?
и вообще, я что-то с трудом понимаю, что должен делать запрос?

-
- Местный житель
- Сообщения: 2898
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Код: Выделить всё
myPlan == oborot.cplanssch
and dbeg <<= oborot.datob
and dend >>= oborot.datob
Код: Выделить всё
myPlan == oborot.cplanssch
and dbeg <<= oborot.datob
and dend >>= oborot.datob
and myTidk == oborot.tidk (noindex)
Подскажите почему запрос за 2-ет значения:
select katmol.kod,katpodr.kod,katorg.name,katsopr.nsopr,BASEDOC.NODOC, sklorder.norder,katpodr.name,OBOROT.DBSCHETO,OBOROT.SUBOSSCH,oborot.krschetk,
kated.abbr, sporder.kol,oborot.kol,oborot.sumob, SPORDER.RSRPRICE,spsopr.price,katmc.barkod
from oborot, katsopr, sporder, soprhoz, spsopr, katpodr,katorg,sklorder,kated, katmol,spstep,stepdoc,basedoc,katmc
where
((Date(4,1,2010)==katsopr.dopr and
katsopr.nrec==spsopr.csopr and
spsopr.nrec==sporder.cspsopr and
sporder.cmc ==katmc.nrec and
word(101)==soprhoz.tidkgal and
katsopr.nrec/==soprhoz.csoprdoc and
katsopr.corg /== katorg.nrec and
katsopr.CPODRTO == katpodr.nrec and
katsopr.nrec == sklorder.csopr and
sklorder.cmol == katmol.nrec and
soprhoz.nrec/==oborot.csoprhoz and
katsopr.cstepdoc == spstep.nrec and
spstep.CSTEPDOC == stepdoc.nrec and
stepdoc.cbasedoc == basedoc.nrec and
oborot.ced == kated.nrec ));
select katmol.kod,katpodr.kod,katorg.name,katsopr.nsopr,BASEDOC.NODOC, sklorder.norder,katpodr.name,OBOROT.DBSCHETO,OBOROT.SUBOSSCH,oborot.krschetk,
kated.abbr, sporder.kol,oborot.kol,oborot.sumob, SPORDER.RSRPRICE,spsopr.price,katmc.barkod
from oborot, katsopr, sporder, soprhoz, spsopr, katpodr,katorg,sklorder,kated, katmol,spstep,stepdoc,basedoc,katmc
where
((Date(4,1,2010)==katsopr.dopr and
katsopr.nrec==spsopr.csopr and
spsopr.nrec==sporder.cspsopr and
sporder.cmc ==katmc.nrec and
word(101)==soprhoz.tidkgal and
katsopr.nrec/==soprhoz.csoprdoc and
katsopr.corg /== katorg.nrec and
katsopr.CPODRTO == katpodr.nrec and
katsopr.nrec == sklorder.csopr and
sklorder.cmol == katmol.nrec and
soprhoz.nrec/==oborot.csoprhoz and
katsopr.cstepdoc == spstep.nrec and
spstep.CSTEPDOC == stepdoc.nrec and
stepdoc.cbasedoc == basedoc.nrec and
oborot.ced == kated.nrec ));
-
- Местный житель
- Сообщения: 222
- Зарегистрирован: 04 июн 2008, 14:35
- Откуда: Стерлитамак
- Контактная информация:
В нормальном SQL задвоение возникает при left outer join, если в таблице подцепляемой есть два одинаковых кода. Ну скажем в справочник влепили два одинаковых кода. В галактическом SQL, вроде как, левому джоину соответствует мягкая сцепка. Правильно вам советуют: сужайте выборку и добавляйте подцепки до появления задвоения. А дальше думать разбиратса.
У вас например может быть так: есть одна проводка и две позиции спецификации накладной, при сцепке мы получим две записи. Все логично.
У вас например может быть так: есть одна проводка и две позиции спецификации накладной, при сцепке мы получим две записи. Все логично.
Подскажите как избавится од этой проблемы.
select katmol.kod,katpodr.kod,katorg.name,katsopr.nsopr,oborot.datob,BASEDOC.NODOC, sklorder.norder,katpodr.name,
OBOROT.DBSCHETO,OBOROT.SUBOSSCH,oborot.krschetk,kated.abbr, sporder.kol,oborot.kol,oborot.sumob, SPORDER.RSRPRICE,katmc.barkod
from oborot,soprhoz,katsopr,katorg,katpodr,sklorder,stepdoc,basedoc,sporder,kated,katmc
where
(((myPlan) == oborot.cplanssch and
Date(4,1,2010)==oborot.datob and
word(101) == oborot.tidk (noindex) and
oborot.csoprhoz /== soprhoz.nrec and
soprhoz.csoprdoc == katsopr.nrec and
sporder.cmc ==katmc.nrec and
katsopr.corg == katorg.nrec and
katsopr.CPODRTO == katpodr.nrec and
katsopr.nrec == sklorder.csopr and
sklorder.cmol == katmol.nrec and
katsopr.cstepdoc == stepdoc.nrec and
stepdoc.cbasedoc == basedoc.nrec and
oborot.ced == kated.nrec and
sporder.cmc ==katmc.nrec ));
Добавляю к запросу эти подцепки:
katsopr.nrec==spsopr.csopr and
spsopr.nrec==sporder.cspsopr and
удваивает проводки , но данные выводит все;
Добавляю эти:
katsopr.nrec == sporder.CSPSOPR and
sporder.nrec == spsopr.cspsopr and
проводки не задваивает, но значение полей: SPORDER.RSRPRICE, katmc.barkod -забывает символами "?" и данных не выводит.
Подскажите как избавится од этого?
select katmol.kod,katpodr.kod,katorg.name,katsopr.nsopr,oborot.datob,BASEDOC.NODOC, sklorder.norder,katpodr.name,
OBOROT.DBSCHETO,OBOROT.SUBOSSCH,oborot.krschetk,kated.abbr, sporder.kol,oborot.kol,oborot.sumob, SPORDER.RSRPRICE,katmc.barkod
from oborot,soprhoz,katsopr,katorg,katpodr,sklorder,stepdoc,basedoc,sporder,kated,katmc
where
(((myPlan) == oborot.cplanssch and
Date(4,1,2010)==oborot.datob and
word(101) == oborot.tidk (noindex) and
oborot.csoprhoz /== soprhoz.nrec and
soprhoz.csoprdoc == katsopr.nrec and
sporder.cmc ==katmc.nrec and
katsopr.corg == katorg.nrec and
katsopr.CPODRTO == katpodr.nrec and
katsopr.nrec == sklorder.csopr and
sklorder.cmol == katmol.nrec and
katsopr.cstepdoc == stepdoc.nrec and
stepdoc.cbasedoc == basedoc.nrec and
oborot.ced == kated.nrec and
sporder.cmc ==katmc.nrec ));
Добавляю к запросу эти подцепки:
katsopr.nrec==spsopr.csopr and
spsopr.nrec==sporder.cspsopr and
удваивает проводки , но данные выводит все;
Добавляю эти:
katsopr.nrec == sporder.CSPSOPR and
sporder.nrec == spsopr.cspsopr and
проводки не задваивает, но значение полей: SPORDER.RSRPRICE, katmc.barkod -забывает символами "?" и данных не выводит.
Подскажите как избавится од этого?
-
- Местный житель
- Сообщения: 1846
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
У Вас сколько позиций spsopr и оборот в конкретной накладной ?tolctiy писал(а):...доабавляю к запросу эти подцепки:
katsopr.nrec==spsopr.csopr and
spsopr.nrec==sporder.cspsopr and
удваивает проводки , но данные выводит все;...
На каждую позицию МЦ просто будет выводится n nроводок из оборот к конкретному документу...
sporder.CSPSOPR, насколько я помню, ссылается на spsopr.nrectolctiy писал(а): Добавляю эти:
katsopr.nrec == sporder.CSPSOPR and
sporder.nrec == spsopr.cspsopr and
проводки не задваивает, но значение полей: SPORDER.RSRPRICE, katmc.barkod -забывает символами "?" и данных не выводит.
Подскажите как избавится од этого?