|
|
#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; Запрос не отрабатывает как надо. Куда копать? Спасибо. |
|
|
|
|
#2 |
|
Участник
|
зачем?
|
|
|
|
|
#3 |
|
северный Будда
|
я так полагаю, что в момент построения запроса _inventtrans.Qty ещё просто не посчитано. отсюда и проблема.
сделайте селект без сравнения количества, а потом сравнивайте отобранное
__________________
С уважением, Вячеслав |
|
|
|
|
#4 |
|
Участник
|
если вам нужно найти расхождения между inventsum и inventtrans, то есть для этих целей класс inventSumReCalcItem
|
|
|
|
| За это сообщение автора поблагодарили: pitersky (1), Borsugg (1). | |
|
|
#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. |
|
|
|
|
#6 |
|
Участник
|
Цитата:
Цитата:
Сообщение от ice
если вам нужно найти расхождения между inventsum и inventtrans, то есть для этих целей класс inventSumReCalcItem
Цитата:
X++: ForceNestedLoopПоследний раз редактировалось Borsugg; 01.09.2011 в 17:28. |
|
|
|
|
#7 |
|
Участник
|
Это же хинт. Хинт который меняет способ выполненя джойна в запросе (но не сам запрос).
Хинты никогда не влияют на результирующую выборку - они влияют на способ её получения. SQL в Аксапте |
|
|
|
| За это сообщение автора поблагодарили: Borsugg (1). | |
|
|
#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 | |||
|