AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.09.2011, 16:03   #1  
Borsugg is offline
Borsugg
Участник
 
22 / 10 (1) +
Регистрация: 09.08.2011
Проблема с запросом
Добрый всем день!

Написал запрос:

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;
С помощью запроса хочу получить строки, в которых сумма по InventTrans.Ordered отличается от значения InventSum.Ordered.

Запрос не отрабатывает как надо. Куда копать? Спасибо.
Старый 01.09.2011, 16:07   #2  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,726 / 405 (17) +++++++
Регистрация: 23.03.2006
зачем?
Старый 01.09.2011, 16:08   #3  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,496 / 416 (16) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
я так полагаю, что в момент построения запроса _inventtrans.Qty ещё просто не посчитано. отсюда и проблема.
сделайте селект без сравнения количества, а потом сравнивайте отобранное
__________________
С уважением,
Вячеслав
Старый 01.09.2011, 16:10   #4  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,726 / 405 (17) +++++++
Регистрация: 23.03.2006
если вам нужно найти расхождения между inventsum и inventtrans, то есть для этих целей класс inventSumReCalcItem
За это сообщение автора поблагодарили: pitersky (1), Borsugg (1).
Старый 01.09.2011, 16:36   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,433 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Borsugg Посмотреть сообщение
Запрос не отрабатывает как надо. Куда копать? Спасибо.
Специфика 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  
Borsugg is offline
Borsugg
Участник
 
22 / 10 (1) +
Регистрация: 09.08.2011
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Специфика SQL в аксапте такова, что сначала всегда выполняются все джойны, а только потом группировки. HAVING в аксапте тоже отсутствует. Поэтому единственная возможность здалать такую выбоорку через аксапту - это разбить ваш запрос на два вложенных.
Как раз думал об этом, что без разбиения не обойтись.. Про специфику спасибо, буду дальше читать мануалы..

Цитата:
Сообщение от ice
если вам нужно найти расхождения между inventsum и inventtrans, то есть для этих целей класс inventSumReCalcItem
Спасибо, обязательно попробую - скорее всего это то, что мне нужно.

Цитата:
Сообщение от pitersky Посмотреть сообщение
я так полагаю, что в момент построения запроса _inventtrans.Qty ещё просто не посчитано. отсюда и проблема.
сделайте селект без сравнения количества, а потом сравнивайте отобранное
А
X++:
ForceNestedLoop
в этом случае это никак не помогает?

Последний раз редактировалось Borsugg; 01.09.2011 в 17:28.
Старый 01.09.2011, 18:31   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,433 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Borsugg Посмотреть сообщение
А
X++:
ForceNestedLoop
в этом случае это никак не помогает?
Это же хинт. Хинт который меняет способ выполненя джойна в запросе (но не сам запрос).
Хинты никогда не влияют на результирующую выборку - они влияют на способ её получения.
SQL в Аксапте
За это сообщение автора поблагодарили: Borsugg (1).
Старый 22.11.2013, 15:17   #8  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
HAVING в аксапте тоже отсутствует. Поэтому единственная возможность здалать такую выбоорку через аксапту - это разбить ваш запрос на два вложенных.
В 2012 having появился, правда доступен только через объект Query. Небольшой пример, выводит название групп клиентов, в которых меньше 10 участников:
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).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема с запросом Raduga DAX: Программирование 7 07.04.2010 14:00
Проблема с SQL запросом kalex_a DAX: Программирование 15 31.03.2010 11:28
Проблема с запросом kalex_a DAX: Программирование 2 17.08.2009 08:05
Проблема с запросом Protey DAX: Программирование 7 10.07.2006 09:32
Проблема: русские шрифты в отчетах, формируемых на сервере. Anais DAX: Администрирование 3 17.11.2003 13:20

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:20.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.