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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.11.2004, 16:12   #1  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
join
Почему курсор пуст??

PHP код:
    while select count(RecId
        
from inventDim join inventSum  
        group by InventDimId
    
{
        print 
inventDim.wMSLocationId;
        print 
inventSum.InventDimId;    // пусто
        
pause;
    } 
Старый 09.11.2004, 16:26   #2  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Потому, что вы запрашиваете count(RecId) и максимум, на что вы можете надеяться - это получить количкство записей, удовлетворяющих, наложенным условиям:

PHP код:
print inventDim.recId
Старый 09.11.2004, 16:33   #3  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Как быть?
Старый 09.11.2004, 16:36   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Ну почему же, Андре.
Можно еще получить знание InventDimId, поскольку по нему идет группировка.

для того, чтобы получать значение wMSLocationId надо включить его в группировки

PHP код:
while select count(RecId
        
from inventDim join inventSum  
        group by InventDimId
wMSLocationId
    
{
        print 
inventDim.wMSLocationId;
        print 
inventSum.InventDimId;
        
pause
Старый 09.11.2004, 16:41   #5  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
PHP код:
    while select count(RecId)
        
from inventSum  join inventDim
        group by InventDimId
,wMSLocationId
    
{
        print 
inventDim.wMSLocationId;
        print 
inventSum.InventDimId;    // пусто
    

inventSum.InventDimId осталось пустым!
Старый 09.11.2004, 16:44   #6  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
PHP код:
while select count(RecId),InventDimId,wMSLocationId 
        from inventDim join inventSum  
        group by InventDimId
wMSLocationId
    
{
        print inventDim.wMSLocationId;
        print inventSum.InventDimId;
        pause;
    } 
С Уважением,
Георгий.
Старый 09.11.2004, 16:47   #7  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Ну почему же, Андре.
Можно еще получить знание InventDimId, поскольку по нему идет группировка.
Группировка группировкой, но на клиент возвращается то, что select-ся. Собственно,твой последний код и подтверждает это.
Старый 09.11.2004, 16:56   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
а черт...
спасибо, Андре, спасибо, George.
Старый 09.11.2004, 17:41   #9  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
PHP код:
    while select count(RecId),InventDimId,wMSLocationId
        from inventDim join inventSum
        group by InventDimId
wMSLocationId
        
{
            print 
inventDim.wMSLocationId;
            print 
inventSum.InventDimId;
            
pause;
        } 
Для группировки по одному полю -- нет проблем,
для двух полей -- вылетает ошибка -- таблица не содержит это поле!
Старый 09.11.2004, 17:43   #10  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Не смотрел в Аксапту, но подозреваю, что поля из разных таблиц. В этом случае group by надо писать два раза - для каждой таблицы.
Старый 09.11.2004, 18:45   #11  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Простите за глупый вопрос.... а по каким полям Вы их объединяите?
Старый 09.11.2004, 19:08   #12  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Это как раз ответ будет глупым, а не вопрос:

Хотелось по полю InventDimId
Старый 09.11.2004, 19:11   #13  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Хотелось по полю InventDimId
Надо в where условие писать, по которому таблицы соединяются.

p.s. Общий совет - щелкните на AOT правой клавишей мыши -> Найти. И посмотрите примеры использования select, group by и т.д.
Старый 09.11.2004, 19:13   #14  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Спасибо за совет!
Старый 09.11.2004, 20:08   #15  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Повторюсь, т.к. запрос я так и не написал:

Есть две таблицы InventSum и InventDim.

Мне бы хотелось иметь выборку состоящую ровно из всех записей InventSum при этом кажой записи сооьветсвует довесок из InventDim ( склад и ячейка) связь по InventDimId.

Пока я остановился на таком запросе

PHP код:
    while select inventSum
 
//       group by wMSLocationId
    
exists join  inventDim
 
//        group by InventDimId
             
where inventSum.InventDimId == inventSum.InventDimId

        
{
            print 
inventDim.wMSLocationId;
            print 
inventSum.InventDimId;
        } 
Который выводит мне все записи из InventSum
Но не видит дополнений из InventDim (Ячейку wMSLocationId)

Буду благодарен любому совету!
Старый 10.11.2004, 05:15   #16  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Блин, ты сразу 2 ошибки совершил в своём запросе. 8()
Во первых - exists join по своему определению НИЧЕГО не должен возвращать в подчинённой таблице! Это очевидно, ведь для каждой записи в главной таблице по идее в подчинённой может соотвествовать несколько записей, следовательно неизвестно какую именно надо возвращать, следовательно exists/notexists join ничего не должен возвращать тебе в подчинённых таблицах.
Во вторых - в условии-связке ты написал where inventSum.InventDimId == inventSum.InventDimId. Если приглядеться к сей конструкции становится очевидно почему она не работает.

Следующий код работает нормально:

PHP код:
static void jobxArgs args )
{
    
InventSum InventSum;
    
InventDim InventDim;
    
int i;
    ;
    
select inventSum join  inventDim
        where inventSum
.InventDimId == inventDim.InventDimId;
    for( 
120i++ )
    {
        print 
inventDim.wMSLocationId" "inventSum.InventDimId;
        
next inventSum;
        if ( !
inventSum )
            break;
    }
    
pause;

Теперь дай чёткое определение чего ты хочешь добиться группировками и... наверное поймешь что неправильно ставишь задачу.
Старый 10.11.2004, 09:43   #17  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Спасибо ОГРОМНОЕ!
Группировки мне не понадобятся, я наложу еще два условия!
Запрос как раз то что мне нужно!

Единственно -- как оптимизировать цикл, что бы он шел не max(20,<20) а реальное число записей??

Еще раз спасибо!
Старый 10.11.2004, 11:22   #18  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Re: Спасибо ОГРОМНОЕ!
Цитата:
...
Единственно -- как оптимизировать цикл, что бы он шел не max(20,<20) а реальное число записей??
...

Ну положим слово "оптимизировать" тут неуместно, да и логическая конструкция max(20,<20) всегда возвращает 20 (min было бы уместнее)....... тем не менее видимо ты хочешь добиться следующего:

PHP код:
static void jobxArgs args )
{
    
InventSum InventSum;
    
InventDim InventDim;
    
int i;
    ;
    while 
select inventSum join  inventDim
        where inventSum
.InventDimId == inventDim.InventDimId
    
{
        print 
inventDim.wMSLocationId" "inventSum.InventDimId;
    }
    
pause;

Старый 10.11.2004, 11:39   #19  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Thumbs up
Спасибо!
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
2 while select или join? _scorp_ DAX: Программирование 9 23.01.2009 16:02
AX UK: Join the Virtual Partner Community Blog bot DAX Blogs 0 26.03.2008 04:17
Глюки в Query с разными типами Join (в т.ч. NonExistsJoin) к одной таблице gl00mie DAX: Программирование 10 14.02.2007 13:22
2 и более OUTER JOIN к одному паренту Ronin DAX: Программирование 21 19.12.2005 13:42

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

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

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