AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen Alle Foren als gelesen markieren

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 12.05.2004, 14:55   #1  
axz ist offline
axz
Участник
 
19 / 10 (1) +
Registriert seit: 04.12.2003
? Ошибочное выполнение запроса Axapt-ой
Подскажите что неправильно в следующем запросе ...
Он подразумевает объединение временной и постоянной таблиц, выборку по условиям и группировку результата по 3м (хотя это не принципиально) полям. Проблема в том, что неправильно работает группировка, те в выборке получаються записи(>1) с одинаковыми полями, учавствующими в group by выражении. Причем проблема только при объединении и группировке временной таблицы (в данном случае TmpFrmVirtual ) и постоянной (в примере это InventTrans). Вопрос в том можно ли вообще в одном запросе использовать временную и пост. таблицы и если да то что я делаю неправильно?
Axapta 2.5
PHP-Code:
static void testJob1(args a)
{
    
InventTrans     inventTrans;
    
TmpFrmVirtual tmpFrmVirtual;
    
//Table3 tmpFrmVirtual;
    
;

    
tmpFrmVirtual.InventTransId "248661";
    
tmpFrmVirtual.insert();
    
tmpFrmVirtual.InventTransId "248661";
    
tmpFrmVirtual.insert();

    while
        
select tmpFrmVirtual
        join  inventTrans
            group by TransRefId
PackingSlipIdDatePhysical
            where   inventTrans
.InventTransId == tmpFrmVirtual.InventTransId &&
                    
inventTrans.TransType == InventTransType::Purch &&
                    
inventTrans.StatusReceipt == StatusReceipt::Received

    
{
        
info(strfmt("%1, %2, %3",inventTrans.TransRefIdinventTrans.PackingSlipIdinventTrans.DatePhysical));
    } 
Alt 12.05.2004, 15:14   #2  
trud ist offline
trud
Участник
Лучший по профессии 2017
 
1.039 / 1635 (57) ++++++++
Registriert seit: 07.06.2003
Blog-Einträge: 1
join со временной таблице транслируется Акскптой в нечто вроде
while select tmpTable
{
while select inventTrans
group by F1, F2
{
}
}
Естественной никакой уникальности полей F1, F2 в данном случае не гарантируется.
Alt 12.05.2004, 15:44   #3  
Владимир Максимов ist offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1.715 / 1204 (44) ++++++++
Registriert seit: 13.01.2004
Blog-Einträge: 3
Продублируй Group BY для tmpFrmVirtual (или для inventTrans)

PHP-Code:
while
        
select tmpFrmVirtual
            group by InventTransId
        join  inventTrans
            group by TransRefId
PackingSlipIdDatePhysical
            where   inventTrans
.InventTransId == tmpFrmVirtual.InventTransId &&
                    
inventTrans.TransType == InventTransType::Purch &&
                    
inventTrans.StatusReceipt == StatusReceipt::Received

    
{
        
info(strfmt("%1, %2, %3",inventTrans.TransRefIdinventTrans.PackingSlipIdinventTrans.DatePhysical)); 
Непонятно, почему ты собственно ожидал уникальности данных, если поле InventTransId даже не включено в список групировки?
Alt 12.05.2004, 16:11   #4  
dn ist offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Registriert seit: 26.03.2003
Ort: Москва
Временную и постоянную таблицу можно использовать в одном запросе, но с известной степенью осторожности. Смотри поиском по сайту - это не раз обсуждалось.

В твоем случае логичнее было бы использовать exists join, а не inner join, поменяв при этом порядок следования таблиц в запросе. Однако, это всё равно не прокатит, т.к. поле для связки с временной таблицей (inventTrans.InventTransId) не входит в состав полей секции group by и соответственно не войдет в выборку.

По-моему, здесь дело не во временной таблице.
Alt 12.05.2004, 17:00   #5  
axz ist offline
axz
Участник
 
19 / 10 (1) +
Registriert seit: 04.12.2003
Zitat:
Изначально опубликовано Владимир Максимов
Продублируй Group BY для tmpFrmVirtual (или для inventTrans)
...
Непонятно, почему ты собственно ожидал уникальности данных, если поле InventTransId даже не включено в список групировки?
InventTransId и не должно входить в список полей по которым происходит группировка, по нему 2 таблицы связываються, а уже над тем результатом что получился уже выполняется группировка.
Alt 12.05.2004, 17:53   #6  
axz ist offline
axz
Участник
 
19 / 10 (1) +
Registriert seit: 04.12.2003
Zitat:
Изначально опубликовано dn
Временную и постоянную таблицу можно использовать в одном запросе, но с известной степенью осторожности. Смотри поиском по сайту - это не раз обсуждалось.

В твоем случае логичнее было бы использовать exists join, а не inner join, поменяв при этом порядок следования таблиц в запросе. Однако, это всё равно не прокатит, т.к. поле для связки с временной таблицей (inventTrans.InventTransId) не входит в состав полей секции group by и соответственно не войдет в выборку.

По-моему, здесь дело не во временной таблице.
]

Да с помощью exists join тоже не получиться. А во временной все и дело, потому что если вместо временной использовать постоянную, то результат получается правильный.

Кстати вот запрос SQL:

SELECT B.TRANSREFID,B.PACKINGSLIPID,B.DATEPHYSICAL
FROM TABLE3 A,INVENTTRANS B
WHERE
(A.PRK_INVENTTRANSID=B.INVENTTRANSID) AND
(B.TRANSTYPE=3) AND
(B.STATUSRECEIPT=2)
GROUP BY B.TRANSREFID,B.PACKINGSLIPID,B.DATEPHYSICAL
ORDER BY B.TRANSREFID,B.PACKINGSLIPID,B.DATEPHYSICAL

В данном случае TABLE3 - это постоянная таблица, вместо временной
Alt 13.05.2004, 09:24   #7  
dn ist offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Registriert seit: 26.03.2003
Ort: Москва
Zitat:
Изначально опубликовано axz
А во временной все и дело, потому что если вместо временной использовать постоянную, то результат получается правильный.
Т.е. trud был абсолютно прав. Спасибо, буду иметь в виду.
Alt 13.05.2004, 09:32   #8  
axz ist offline
axz
Участник
 
19 / 10 (1) +
Registriert seit: 04.12.2003
Zitat:
Изначально опубликовано dn

Т.е. trud был абсолютно прав. Спасибо, буду иметь в виду.
Да, спасибо trud, что пролил свет на это темное дело
Alt 13.05.2004, 10:03   #9  
Ser ist offline
Ser
NavAx
 
99 / 14 (1) ++
Registriert seit: 04.03.2002
Ort: Москва
PHP-Code:
tmpFrmVirtual.InventTransId "248661";
tmpFrmVirtual.insert();
tmpFrmVirtual.InventTransId "248661";
tmpFrmVirtual.insert(); 
а нет ли здесь подвоха?
__________________
Чудес не бывает (c), истина где-то рядом (c)...
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Подготовка запроса(ламерские вопросы продолжаются) HorrR DAX: Программирование 4 08.07.2008 13:23
Изменить план выполнения запроса Sequel DAX: Администрирование 2 29.05.2008 15:46
Быстродействие запроса Antonuch DAX: Программирование 1 25.01.2008 15:58
Оптимизация запроса oleg_e DAX: Программирование 16 11.01.2008 10:22
Теория: Создание отчета в виде Запроса Arahnid DAX: Программирование 6 14.11.2007 16:37
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 09:08 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.