01.09.2011, 16:03 | #1 |
Участник
|
Проблема с запросом
Добрый всем день!
Написал запрос: X++: select ForceNestedLoop sum(qty) from _inventtrans group by Itemid, InventDimId where _inventtrans.StatusReceipt == StatusReceipt::Ordered exists join _inventsum where _inventsum.ItemId == _inventtrans.ItemId && _inventsum.inventDimId == _inventtrans.InventDimId && _inventsum.Ordered != _inventtrans.Qty; Запрос не отрабатывает как надо. Куда копать? Спасибо. |
|
01.09.2011, 16:07 | #2 |
Участник
|
зачем?
|
|
01.09.2011, 16:08 | #3 |
северный Будда
|
я так полагаю, что в момент построения запроса _inventtrans.Qty ещё просто не посчитано. отсюда и проблема.
сделайте селект без сравнения количества, а потом сравнивайте отобранное
__________________
С уважением, Вячеслав |
|
01.09.2011, 16:10 | #4 |
Участник
|
если вам нужно найти расхождения между inventsum и inventtrans, то есть для этих целей класс inventSumReCalcItem
|
|
|
За это сообщение автора поблагодарили: pitersky (1), Borsugg (1). |
01.09.2011, 16:36 | #5 |
Участник
|
Специфика SQL в аксапте такова, что сначала всегда выполняются все джойны, а только потом группировки. HAVING в аксапте тоже отсутствует. Поэтому единственная возможность здалать такую выбоорку через аксапту - это разбить ваш запрос на два вложенных.
X++: while select ForceNestedLoop sum(qty) from _inventtrans group by Itemid, InventDimId where _inventtrans.StatusReceipt == StatusReceipt::Ordered { select firstonly Ordered from _inventsum where _inventsum.ItemId == _inventtrans.ItemId && _inventsum.inventDimId == _inventtrans.InventDimId; if(_inventsum.Ordered != _inventtrans.qty) info(_inventtrans.ItemId) } Последний раз редактировалось S.Kuskov; 01.09.2011 в 16:40. |
|
01.09.2011, 17:25 | #6 |
Участник
|
Цитата:
Цитата:
Сообщение от ice
если вам нужно найти расхождения между inventsum и inventtrans, то есть для этих целей класс inventSumReCalcItem
Цитата:
X++: ForceNestedLoop Последний раз редактировалось Borsugg; 01.09.2011 в 17:28. |
|
01.09.2011, 18:31 | #7 |
Участник
|
Это же хинт. Хинт который меняет способ выполненя джойна в запросе (но не сам запрос).
Хинты никогда не влияют на результирующую выборку - они влияют на способ её получения. SQL в Аксапте |
|
|
За это сообщение автора поблагодарили: Borsugg (1). |
22.11.2013, 15:17 | #8 |
Молодой, подающий надежды
|
Цитата:
X++: static void QueryHavingExample(Args _args) { Query query; QueryBuildDataSource qbds; QueryHavingFilter havingFilter; QueryRun queryRun; CustTable custTable; query = new Query(); qbds = query.addDataSource(tableNum(CustTable)); qbds.addGroupByField(fieldNum(CustTable, CustGroup)); havingFilter = query.addHavingFilter(qbds, fieldStr(CustTable, RecId), AggregateFunction::Count); havingFilter.value('< 10'); queryRun = new QueryRun(query); while (queryRun.next()) { custTable = queryRun.get(tableNum(CustTable)); info(custTable.CustGroup); } info("done"); }
__________________
Кононов Пётр Последний раз редактировалось pedrozzz; 22.11.2013 в 15:21. |
|
|
За это сообщение автора поблагодарили: S.Kuskov (3). |
|
Похожие темы | ||||
Тема | Ответов | |||
Проблема с запросом | 7 | |||
Проблема с SQL запросом | 15 | |||
Проблема с запросом | 2 | |||
Проблема с запросом | 7 | |||
Проблема: русские шрифты в отчетах, формируемых на сервере. | 3 |
|