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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.07.2005, 12:34   #1  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
select count(RecId)
День Добрый!

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

PHP код:
       totalRecCount = (select count(RecIdfrom inventJournalTrans
            where inventJournalTrans
.JournalId == _journalId &&
                  
inventJournalTrans.TransDate == _transDate

                   join inventTrans
                    where   inventTrans
.InventTransId == inventJournalTrans.InventTransId &&
                            
inventTrans.StatusIssue == StatusIssue::Sold &&
                            
inventTrans.Qty != 0
                
).RecId
В чем ошибка? (Без join рабоает)
Старый 29.07.2005, 12:36   #2  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Блин! А сам-то как думаешь?

Ты ж только RecId тянешь из inventJournalTrans. А связку делаешь по inventJournalTrans.InventTransId.

С Уважением,
Георгий
Старый 29.07.2005, 12:39   #3  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,312 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Не, поле, по которому делается связка - тут ни при чем. Просто выражение
PHP код:
join inventTrans 
на самом деле означает
PHP код:
join from inventTrans 
. Когда используешь агрегатные функции (count() в данном случае) - нужно указывать по каким полям идет группировка, т.е. * запрещена. В крайнем случае, напиши
PHP код:
join count(recIdfrom inventTrans 
. И будет счастье
Старый 29.07.2005, 12:41   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,312 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
а! и еще. ).RecId - как ты думаешь в какой таблице относится? Аксапта этого не знает.
Поэтому тут нужно уже потом обращаясь к табл переменной получить .RecId
Старый 29.07.2005, 12:43   #5  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
короче
1. вытащи из скобок
2. используй exists join
Старый 29.07.2005, 12:55   #6  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Cool Ах, так?
И вообще, хороший тон - это пользоваться Query.

Используй CountTotal()

С Уважением,
Георгий

P.S. Да, кстати, надеюсь, у тебя класс QueryRun подправлен, как у mazzy написано? А то в стандартной версии проблемы были...
Старый 02.08.2005, 11:50   #7  
kvan is offline
kvan
Moderator
Аватар для kvan
Дети Юза
 
775 / 49 (3) +
Регистрация: 07.08.2002
Адрес: Donetsk
Цитата:
2. используй exists join
а потом на этапе оптимизации будешь переписывать ...
Старый 02.08.2005, 11:55   #8  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Re: Ах, так?
Цитата:
Изначально опубликовано George Nordic

P.S. Да, кстати, надеюсь, у тебя класс QueryRun подправлен, как у mazzy написано? А
то в стандартной версии проблемы были...
А можно ссылку?

2 kvan:

Можно поподробнее?
Старый 02.08.2005, 12:02   #9  
kvan is offline
kvan
Moderator
Аватар для kvan
Дети Юза
 
775 / 49 (3) +
Регистрация: 07.08.2002
Адрес: Donetsk
Цитата:
А можно ссылку?
http://www.axforum.info/forums/showt...ght=CountTotal

Цитата:
Можно поподробнее?
Я по возможности использую вместо exists join Table конструкцию join (RecId) from Table.
Смысл тот же - но местам очень сильно сокращает время выполнения запроса.
Старый 02.08.2005, 12:42   #10  
ALES is offline
ALES
Участник
Злыдни
 
220 / 45 (2) +++
Регистрация: 11.08.2004
Цитата:
Изначально опубликовано db
2. используй exists join
быстрее join tableId from
Старый 02.08.2005, 12:50   #11  
kvan is offline
kvan
Moderator
Аватар для kvan
Дети Юза
 
775 / 49 (3) +
Регистрация: 07.08.2002
Адрес: Donetsk
Цитата:
быстрее join tableId from
Можно и так, но в RecId все таки номер записи, а это иногда бывает нужно

DataAreaId удобно использовать в случае когда в первой таблице есть группировка и после join someTable нужно тоже сделать группировку. Вот тут мы и вспоминаем про DataAreaId
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Select count(RecId) Упорядочить по возрастанию AxTimur DAX: Программирование 7 10.10.2008 15:22
Очередные грабли while select CasperSKY DAX: Программирование 14 23.03.2008 12:30
Что лучше select RecId или select TableId Logger DAX: Программирование 9 02.06.2007 15:13
aEremenko: Дефрагментация RecID Blog bot DAX Blogs 2 06.03.2007 22:25
Fred Shen: Always use recId to know if a select statement returns a record Blog bot DAX Blogs 0 28.10.2006 16:40
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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