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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.03.2006, 11:32   #1  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Цитата:
Сообщение от korvin
Проверил, не совсем то, вернее совсем не то получается, что в задаче
А что не то?
Свиду вроде все нормально.

info вот что выдает:
SELECT * FROM Table1 GROUP BY Table1.StorageId ASC, Table1.WareId ASC, Table1.PartyId ASC WHERE ((StorageId = 000 OR StorageId = 001)) AND ((WareId = 002 OR WareId = 003)) JOIN SUM(AmountMod), SUM(CostMod) FROM Table1 WHERE Table1.StorageId = Table1.StorageId AND Table1.WareId = Table1.WareId

Планы запросов только скобками отличаются:

SELECT A.STORAGEID,A.WAREID,A.PARTYID,SUM(B.AMOUNTMOD),SUM(B.COSTMOD)
FROM TABLE1 A,TABLE1 B
WHERE ((A.DATAAREAID='DAT')
AND (((A.STORAGEID='000') OR (A.STORAGEID='001'))
AND ((A.WAREID='002') OR (A.WAREID='003'))))
AND ((B.DATAAREAID='DAT')
AND ((A.STORAGEID=B.STORAGEID)
AND (A.WAREID=B.WAREID)))
GROUP BY A.STORAGEID,A.WAREID,A.PARTYID
ORDER BY A.STORAGEID,A.WAREID,A.PARTYID OPTION(FAST 22)

SELECT A.STORAGEID,A.WAREID,A.PARTYID,SUM(B.AMOUNTMOD),SUM(B.COSTMOD)
FROM TABLE1 A,TABLE1 B
WHERE (A.DATAAREAID='DAT')
AND ((B.DATAAREAID='DAT')
AND (((((A.STORAGEID='000') OR (A.STORAGEID='001'))
AND ((A.WAREID='002') OR (A.WAREID='003')))
AND (B.STORAGEID=A.STORAGEID))
AND (B.WAREID=A.WAREID)))
GROUP BY A.STORAGEID,A.WAREID,A.PARTYID
ORDER BY A.STORAGEID,A.WAREID,A.PARTYID OPTION(FAST 22)

PHP код:
static void Job39(Args _args)
{
    
Table1                          wp0;
    
Table1                          wp1;
    
Table1                          wp0_q;
    
Table1                          wp1_q;
    
StorageId                xxx "000";
    
StorageId                yyy "001";
    
WareId                zzz "002";
    
WareId                aaa "003";

    
Query                           query = new Query();
    
QueryBuildDataSource            qbds1qbds2;

    
QueryRun                        QueryRun;
    ;
    
select from wp0 group by StorageIdWareIdPartyId
    join sum
(AmountMod), sum(CostModfrom wp1
    where
    
(wp0.StorageId == xxx || wp0.StorageId == yyy) &&
    (
wp0.WareId == zzz || wp0.WareId == aaa) &&
    
wp1.StorageId == wp0.StorageId &&
    
wp1.WareId == wp0.WareId;

    
qbds1 query.AddDataSource(tablenum(Table1));
    
qbds1.ordermode(ordermode::groupby);
    
qbds1.addSortField(fieldnum(Table1StorageId));
    
qbds1.addSortField(fieldnum(Table1WareId));
    
qbds1.addSortField(fieldnum(Table1PartyId));
    
qbds1.addrange(fieldnum(Table1StorageId)).value(xxx "," yyy);
    
qbds1.addrange(fieldnum(Table1WareId)).value(zzz "," aaa);


    
qbds2 qbds1.AddDataSource(tablenum(Table1));
    
qbds2.ordermode(ordermode::groupby);
    
qbds2.addSelectionField(fieldnum(Table1AmountMod), selectionField::Sum);
    
qbds2.addSelectionField(fieldnum(Table1CostMod), selectionField::Sum);
    
qbds2.addLink(fieldnum(Table1StorageId), fieldnum(Table1StorageId));
    
qbds2.addLink(fieldnum(Table1WareId), fieldnum(Table1WareId));

    
info(query.dataSourceNo(1).toString());

    
QueryRun = new QueryRun(query);

    
QueryRun.next();

    
wp0_q QueryRun.getNo(1);
    
wp1_q QueryRun.getNo(2);


Последний раз редактировалось raz; 02.03.2006 в 11:38.
Старый 02.03.2006, 11:51   #2  
korvin is offline
korvin
Участник
Аватар для korvin
 
29 / 10 (1) +
Регистрация: 16.01.2006
Адрес: Липецк
Цитата:
Сообщение от raz
А что не то?
Свиду вроде все нормально.

info вот что выдает:
SELECT * FROM Table1 GROUP BY Table1.StorageId ASC, Table1.WareId ASC, Table1.PartyId ASC WHERE ((StorageId = 000 OR StorageId = 001)) AND ((WareId = 002 OR WareId = 003)) JOIN SUM(AmountMod), SUM(CostMod) FROM Table1 WHERE Table1.StorageId = Table1.StorageId AND Table1.WareId = Table1.WareId

Планы запросов только скобками отличаются:

SELECT A.STORAGEID,A.WAREID,A.PARTYID,SUM(B.AMOUNTMOD),SUM(B.COSTMOD)
FROM TABLE1 A,TABLE1 B
WHERE ((A.DATAAREAID='DAT')
AND (((A.STORAGEID='000') OR (A.STORAGEID='001'))
AND ((A.WAREID='002') OR (A.WAREID='003'))))
AND ((B.DATAAREAID='DAT')
AND ((A.STORAGEID=B.STORAGEID)
AND (A.WAREID=B.WAREID)))
GROUP BY A.STORAGEID,A.WAREID,A.PARTYID
ORDER BY A.STORAGEID,A.WAREID,A.PARTYID OPTION(FAST 22)

SELECT A.STORAGEID,A.WAREID,A.PARTYID,SUM(B.AMOUNTMOD),SUM(B.COSTMOD)
FROM TABLE1 A,TABLE1 B
WHERE (A.DATAAREAID='DAT')
AND ((B.DATAAREAID='DAT')
AND (((((A.STORAGEID='000') OR (A.STORAGEID='001'))
AND ((A.WAREID='002') OR (A.WAREID='003')))
AND (B.STORAGEID=A.STORAGEID))
AND (B.WAREID=A.WAREID)))
GROUP BY A.STORAGEID,A.WAREID,A.PARTYID
ORDER BY A.STORAGEID,A.WAREID,A.PARTYID OPTION(FAST 22)

PHP код:
static void Job39(Args _args)
{
    
Table1                          wp0;
    
Table1                          wp1;
    
Table1                          wp0_q;
    
Table1                          wp1_q;
    
StorageId                xxx "000";
    
StorageId                yyy "001";
    
WareId                zzz "002";
    
WareId                aaa "003";

    
Query                           query = new Query();
    
QueryBuildDataSource            qbds1qbds2;

    
QueryRun                        QueryRun;
    ;
    
select from wp0 group by StorageIdWareIdPartyId
    join sum
(AmountMod), sum(CostModfrom wp1
    where
    
(wp0.StorageId == xxx || wp0.StorageId == yyy) &&
    (
wp0.WareId == zzz || wp0.WareId == aaa) &&
    
wp1.StorageId == wp0.StorageId &&
    
wp1.WareId == wp0.WareId;

    
qbds1 query.AddDataSource(tablenum(Table1));
    
qbds1.ordermode(ordermode::groupby);
    
qbds1.addSortField(fieldnum(Table1StorageId));
    
qbds1.addSortField(fieldnum(Table1WareId));
    
qbds1.addSortField(fieldnum(Table1PartyId));
    
qbds1.addrange(fieldnum(Table1StorageId)).value(xxx "," yyy);
    
qbds1.addrange(fieldnum(Table1WareId)).value(zzz "," aaa);


    
qbds2 qbds1.AddDataSource(tablenum(Table1));
    
qbds2.ordermode(ordermode::groupby);
    
qbds2.addSelectionField(fieldnum(Table1AmountMod), selectionField::Sum);
    
qbds2.addSelectionField(fieldnum(Table1CostMod), selectionField::Sum);
    
qbds2.addLink(fieldnum(Table1StorageId), fieldnum(Table1StorageId));
    
qbds2.addLink(fieldnum(Table1WareId), fieldnum(Table1WareId));

    
info(query.dataSourceNo(1).toString());

    
QueryRun = new QueryRun(query);

    
QueryRun.next();

    
wp0_q QueryRun.getNo(1);
    
wp1_q QueryRun.getNo(2);

Извиняюсь был неправ, ошибся у себя в условии, ваш пример отлично работает!
Беру на вооружение. Жаль только что уже сделал через XppCompiler, переработал лишнего...
__________________
Все люди равны, но некоторые равнее...
Теги
query, программно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Advanced query range value expressions: поле таблицы - имя вcтроенной функции year(). ATimTim DAX: Программирование 12 27.03.2009 18:16
Как подставить вычисляемое значение в Range у query Poleax DAX: Программирование 16 17.06.2008 18:52
Что и как можно резать? George Nordic DAX: Администрирование 1 11.05.2004 18:44
можно ли сделать с помощью join следующий запрос: SergAY DAX: Программирование 1 29.07.2003 11:39

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

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

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