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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.05.2007, 09:35   #1  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
? Можно-ли перевести запрос с человечъего на Аксаптовский ?
Собственно вот такой запрос
X++:
select sum(LedgerJournalTrans.AmountCurCredit)
  from LedgerJournalTrans, SalesPaymentJournal
 where SalesPaymentJournal.JournalNum = LedgerJournalTrans.JournalNum
       and rtrim(ltrim(SalesPaymentJournal.SalesId)) = 'КЛ7-0040682'
Можно ли сделать то-же самое, на Аксапте в 1 запрос?
Если сделать так
X++:
    select sum(AmountCurCredit)
        from LedgerJournalTrans
        join
            SalesPaymentJournal
        where SalesPaymentJournal.JournalNum == LedgerJournalTrans.JournalNum
           && SalesPaymentJournal.SalesId == this.SalesId;
то она пытается все поля из 2-й таблицы засунуть в селект.
Старый 31.05.2007, 09:50   #2  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Если вопрос только в том, что запрос возвращает все поля из 2-й таблицы, то напишите не join SalesPaymentJournal, а exists join SalesPaymentJournal.
__________________
Андрей.
За это сообщение автора поблагодарили: egorych (1).
Старый 31.05.2007, 09:53   #3  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
или join max(recID) from SalesPaymentJournal
Старый 31.05.2007, 10:22   #4  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
exists join помог !
Старый 31.05.2007, 10:29   #5  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Не знаю, обоснованно это или нет, но я не очень доверяю exists join.
Возможно это связано с неприятными воспоминаниями того, как эта конструкция отправлялась на сервер БД раньше (как подзапрос), что, естественно, отражалось на быстродействии.
Сейчас, когда пишу запросы, использую или join TableId или join maxOf(recId), как указал Максим постом выше.

Хотя, может это уже и не оправданно.
Старый 31.05.2007, 17:52   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Конкретно в этом запросе теоретически и не нужен. Но как BestPractice думаю стоит писать
Старый 01.06.2007, 19:05   #7  
Shur is offline
Shur
Участник
 
8 / 10 (1) +
Регистрация: 07.03.2003
Адрес: Украина, Донецк
Экономно так :

X++:
select sum(AmountCurCredit)
        from LedgerJournalTrans
        join [COLOR="Red"]TableID from[/COLOR]
            SalesPaymentJournal
        where SalesPaymentJournal.JournalNum == LedgerJournalTrans.JournalNum
           && SalesPaymentJournal.SalesId == this.SalesId;
Старый 01.06.2007, 23:56   #8  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Shur Посмотреть сообщение
Экономно так :

X++:
select sum(AmountCurCredit)
        from LedgerJournalTrans
        join [COLOR="Red"]TableID from[/COLOR]
            SalesPaymentJournal
        where SalesPaymentJournal.JournalNum == LedgerJournalTrans.JournalNum
           && SalesPaymentJournal.SalesId == this.SalesId;
Join TableId может не прокатить... Тут недавно совсем mazzy объяснял про join'ы и "липовые" поля в них.
Старый 02.06.2007, 12:01   #9  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от otkudao Посмотреть сообщение
специально посмотрел в BP - нету ничего про maxof
Конечно нету.
Я имел ввиду немного другое:
Что стоит писать join maxOf всегда (это не обязательно должен быть именно maxOf. можно использовать и minOf к примеру) во избежание ошибок в запросах (когда в запросе используется группировка, а из подчиненной таблицы не вибираются никакие агрегированные поля - получаем ошибку времени выполнения, которая об этом нам сообщает).

Этот BestPractice неписанный, сродни тому, который недавно обсуждался - про использование энумераторов вместо итераторов.
Старый 02.06.2007, 14:36   #10  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Если есть группировка, то выбор "к-н поля" не сработает - будет ошибка, что поле из таблицы не используется в агрегирующей функции и в группировке.
самый простой способ - применить агрегатную функцию к какому-то полю.
Старый 02.06.2007, 17:38   #11  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Да часто. Когда забывал и не делал maxOf или группировку по каким-то полям в подниченной таблице
Миниатюры
Нажмите на изображение для увеличения
Название: ErrorGroupBy.PNG
Просмотров: 489
Размер:	20.0 Кб
ID:	2676  
Старый 02.06.2007, 18:33   #12  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA

Можно обобщить и сказать, что ссылка была на мой личный BestPractice, основанный на опыте собственных шишек
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Запрос по таблице параметров. uchenik DAX: Программирование 26 18.03.2009 07:12
передача параметров в запрос while select tolstjak DAX: Программирование 13 15.02.2009 19:39
Как собрать запрос? moid DAX: Программирование 11 02.07.2007 12:07
Долго отрабатывает запрос по таблице InventItemLocation AlexeyBP DAX: Администрирование 1 30.05.2007 17:33
Не работает запрос на нескольких компаниях Bega DAX: Программирование 3 16.09.2005 10:21
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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