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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.04.2006, 01:44   #1  
velk is offline
velk
Участник
 
194 / 10 (1) +
Регистрация: 17.05.2004
? Подскажите как реализовать такой запрос в Axapte
Подскажите как реализовать такой запрос в Axapte
select InventDim.inventDimId, InventSum.ItemId, InventDim.inventSerialId, InventSerial.AdvertAction, SUM(InventSum.PostedQty)PostedQty, SUM(InventSum.PostedValue)PostedValue
FROM InventSum
JOIN InventDim on InventDim.inventDimId = InventSum.InventDimId
JOIN InventSerial on InventSerial.InventSerialId = InventDim.inventSerialId
JOIN InventTable on InventSum.ItemId = InventTable.ItemId
where InventDim.inventSerialId<>''
GROUP BY InventDim.inventDimId,InventSum.ItemId, InventDim.inventSerialId , InventSerial.AdvertAction
order by InventSum.ItemId
Старый 04.04.2006, 08:59   #2  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
Не совсем понятно, зачем здесь упомянута таблица InventTable...
Старый 04.04.2006, 13:35   #3  
velk is offline
velk
Участник
 
194 / 10 (1) +
Регистрация: 17.05.2004
ну можно и без этой таблицы
select InventDim.inventDimId, InventSum.ItemId, InventDim.inventSerialId, InventSerial.AdvertAction, SUM(InventSum.PostedQty)PostedQty, SUM(InventSum.PostedValue)PostedValue
FROM InventSum
JOIN InventDim on InventDim.inventDimId = InventSum.InventDimId
JOIN InventSerial on InventSerial.InventSerialId = InventDim.inventSerialId
where InventDim.inventSerialId<>''
GROUP BY InventDim.inventDimId,InventSum.ItemId, InventDim.inventSerialId , InventSerial.AdvertAction
order by InventSum.ItemId
Старый 04.04.2006, 13:49   #4  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
А group by и order by по полям на одной таблице помоему нельзя...
Старый 04.04.2006, 14:03   #5  
velk is offline
velk
Участник
 
194 / 10 (1) +
Регистрация: 17.05.2004
Да OREDER BY модно опустить... сама логика нужна
Старый 04.04.2006, 14:07   #6  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
Обязательно должна быть еще связка InventSerial.itemId = InventSum.itemId;
Старый 04.04.2006, 14:07   #7  
latvik is offline
latvik
Участник
 
74 / 13 (1) ++
Регистрация: 27.05.2004
Адрес: Moscow, YS
select sum(PostedQty), sum(PostedValue) from inventSum group by itemId, inventDimId
join InventDim
where InventDim.inventDimId == inventSum.InventDimId
join InventSerial
where InventSerial.InventSerialId == InventDim.inventSerialId &&
InventSerial.InventSerialId != '';

что вроде этого
Старый 04.04.2006, 14:18   #8  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
select ItemId, sum(PostedQty), sum(PostedValue) from InventSum group by ItemId
join InventDimId,InventSerialId from InventDim where InventDim.inventSerialId != "" && InventDim.inventDimId = InventSum.InventDimId group by inventDimId,inventSerialId
join InventSerial where InventSerial.InventSerialId = InventDim.inventSerialIdgroup by AdvertAction

Помоему так (отпишись потом верно нет )
Старый 04.04.2006, 14:29   #9  
latvik is offline
latvik
Участник
 
74 / 13 (1) ++
Регистрация: 27.05.2004
Адрес: Moscow, YS
2Sada
зачем select itemid если есть group by itemid? itemid и так будет доступен. разве нет?
Старый 04.04.2006, 14:35   #10  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
2 latvik для верности и понятливости...(чтоб ближе к вопросу было)
Старый 04.04.2006, 14:57   #11  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
Я все-таки настаиваю на обязательности связки InventSerial.itemId = InventSum.itemId по той причине, что в таблице InventSerial уникальность поддерживается совокупностью полей ItemId и inventSerialId, и предлагаю свой вариант решения:

PHP код:
    Query                   query;
    
QueryRun                qr;
    
QueryBuildDataSource    qbdsSum;
    
QueryBuildDataSource    qbdsDim;
    
QueryBuildDataSource    qbdsSerial;
    
QueryBuildRange         qbrItemSerial;
    ;

    
query       =   new Query();
    
qbdsSum     =   query.addDataSource(tableNum(InventSum));
    
qbdsSum.orderMode(OrderMode::GroupBy);
    
qbdsSum.addSortField(fieldnum(InventSumitemId));
    
qbdsSum.addSelectionField(fieldnum(InventSumitemId));
    
qbdsSum.addSelectionField(fieldnum(InventSumPostedQty), Selectionfield::Sum);
    
qbdsSum.addSelectionField(fieldnum(InventSumPostedValue), Selectionfield::Sum);

    
qbdsDim     =   qbdsSum.addDataSource(tableNum(InventDim));
    
qbdsDim.orderMode(OrderMode::GroupBy);
    
qbdsDim.addSortField(fieldnum(InventDiminventDimId));
    
qbdsDim.addSortField(fieldnum(InventDiminventSerialId));
    
qbdsDim.addSelectionField(fieldnum(InventDiminventDimId));
    
qbdsDim.addSelectionField(fieldnum(InventDiminventSerialId));
    
qbdsDim.joinMode(JoinMode::InnerJoin);
    
qbdsDim.fetchMode(0);
    
qbdsDim.addLink(fieldNum(InventSuminventDimId), fieldNum(InventDiminventDimId));
    
qbdsDim.addRange(fieldNum(InventDiminventSerialId)).value(SysQuery::valueNotEmptyString());

    
qbdsSerial  =   qbdsDim.addDataSource(tableNum(InventSerial));
    
qbdsSerial.orderMode(OrderMode::GroupBy);
    
qbdsSerial.addSortField(fieldNum(InventSerialProdDate));
    
qbdsSerial.addSelectionField(fieldNum(InventSerialProdDate));
    
qbdsSerial.joinMode(JoinMode::InnerJoin);
    
qbdsSerial.fetchMode(0);
    
qbdsSerial.addLink(fieldNum(InventDimInventSerialId), fieldNum(InventSerialInventSerialId));
    
qbrItemSerial qbdsSerial.addRange(fieldNum(InventSerialitemId));
    
qbrItemSerial.value(strfmt("(%1) = %2.%3"fieldstr(InventSerialitemId), qbdsSum.name(), fieldstr(InventSumitemId)));

    
qr = new QueryRun(query);
    while (
qr.next())
    {
        
// тут обработка результатов запроса...
    

Примечание: Так как я меня в таблице InventSerial не оказалось поля AdvertAction, я заменил его на ProdDate, но сути это не меняет.

А вот что выдал трассировщик SQL по этому вопросу:
Код:
SELECT SUM(A.POSTEDQTY),SUM(A.POSTEDVALUE),A.ITEMID,B.INVENTDIMID,B.INVENTSERIALID,C.PRODDATE FROM INVENTSUM A,INVENTDIM B,INVENTSERIAL C WHERE (A.DATAAREAID='zkr') AND ((B.DATAAREAID='zkr') AND ( NOT ((B.INVENTSERIALID=' ')) AND (A.INVENTDIMID=B.INVENTDIMID))) AND ((C.DATAAREAID='zkr') AND ((C.ITEMID=A.ITEMID) AND (B.INVENTSERIALID=C.INVENTSERIALID))) GROUP BY A.ITEMID,B.INVENTDIMID,B.INVENTSERIALID,C.PRODDATE ORDER BY A.ITEMID,B.INVENTDIMID,B.INVENTSERIALID,C.PRODDATE OPTION(FAST 16)
Старый 04.04.2006, 15:06   #12  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
to Roman777
Согласен с необходимостью InventSerial.itemId = InventSum.itemId, но как это реализовать - это уже дело каждого
Главное сам принцип...(синтаксис и все такое(помоему это интересовало автороа темы(хотя я могу и ошибаться(пардон за вложенность...)))...)
Старый 04.04.2006, 21:55   #13  
velk is offline
velk
Участник
 
194 / 10 (1) +
Регистрация: 17.05.2004
Круто получилось....
Спасибо...
сейчас попробую....
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как собрать запрос? moid DAX: Программирование 11 02.07.2007 12:07
Почему join запрос разбивается на подзапросы!? 3oppo DAX: Программирование 59 28.06.2007 11:52
Не работает запрос на нескольких компаниях Bega DAX: Программирование 3 16.09.2005 10:21
Подскажите пожалуйста, как реализовать запрос через QueryBuild vesna DAX: Программирование 3 24.02.2005 06:52
Можно ли в аксапте реализовать такой SQL запрос: Sergey_1972 DAX: Программирование 14 18.03.2004 16:33
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:25.