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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.10.2007, 18:18   #1  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
:( Не могу построить простейший запрос
В обычном SQL это выглядело бы так:
select count(DISTINCT AccountNum) from custTrans where AmountCur > 1000
Перевожу на русский - посчитать количество клиентов, сумма проводки по которым больше 1000.

как это сделать с помощью Query?
Старый 11.10.2007, 18:22   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
X++:
count(custTable.recID) exists join custTrans....
Старый 11.10.2007, 18:33   #3  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
Ну это не Query как я вижу
Старый 11.10.2007, 18:41   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
X++:
    QueryRun qr = SYS_ExpressionQueryBuilder::addDataSource(tableNum(CustTable))
        .count(fieldNum(CustTable, recID))
        .exists(tableNum(CustTrans))
            .matches(fieldNum(CustTrans, AmountCur), '>100')
    .run();
Старый 11.10.2007, 18:58   #5  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Если именно сумма больше, то через запросы в аксапте вы этого пока сделать не можете (это необходим having sum(amountCur) > 1000
X++:
while select sum(AmountCur) from custTrans
group by AccountNum
{
    if (custTrans.amountCur > 1000)
        info(custTrans.accountNum)
}
Старый 12.10.2007, 07:44   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
сумма проводки а не проводок
Старый 12.10.2007, 12:58   #7  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
Цитата:
Сообщение от belugin Посмотреть сообщение
X++:
    QueryRun qr = SYS_ExpressionQueryBuilder::addDataSource(tableNum(CustTable))
        .count(fieldNum(CustTable, recID))
        .exists(tableNum(CustTrans))
            .matches(fieldNum(CustTrans, AmountCur), '>100')
    .run();
Жжоте!
SYS_ExpressionQueryBuilder - что это?
Старый 12.10.2007, 13:05   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
приблуда для людей замученных кверибилддатасурсами
За это сообщение автора поблагодарили: Russland (1).
Старый 12.10.2007, 13:50   #9  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Цитата:
приблуда для людей замученных кверибилддатасурсами
Ничё так. Простенько и со вкусом :-)
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 12.10.2007, 14:00   #10  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
А Маззи говорит что это все фигня и надо визуально делать.
Старый 12.10.2007, 14:06   #11  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Дело в том, что истина посредине.
Просто не надо злоупотреблять ни тем, ни другим подходом.
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 12.10.2007, 14:33   #12  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
а мне жутко не нравятся аотные квери прежде всего тем, что взглядом не определишь, что там настроено. Надо ковыряться, разворачивать и смотреть свойства.
Старый 12.10.2007, 14:39   #13  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Цитата:
не нравятся аотные квери прежде всего тем, что взглядом не определишь, что там настроено. Надо ковыряться, разворачивать и смотреть свойства
ППКС
Зато когда строится стандартный отчёт, квери в АОТ сами просятся.
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 12.10.2007, 15:17   #14  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
Цитата:
Сообщение от belugin Посмотреть сообщение
приблуда для людей замученных кверибилддатасурсами
Мне к сожалению нужно обойтись стандартными средствами
Старый 12.10.2007, 15:19   #15  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
мне четно говоря влом расшифровывать. Общая идея понятна?
Старый 12.10.2007, 16:25   #16  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
Идея непонятна
Цитата:
QueryRun qr = SYS_ExpressionQueryBuilder::addDataSource(tableNum(CustTable))
.count(fieldNum(CustTable, recID))
.exists(tableNum(CustTrans))
.matches(fieldNum(CustTrans, AmountCur), '>100')
.run();}
возвращает кол-во записей с суммой >1000, а мне надо кол-во клиентов.
если поставить .count(fieldNum(CustTable, AccountNum)) возвращает 0.
Старый 12.10.2007, 16:33   #17  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Забыл link

X++:
    QueryRun qr = SYS_ExpressionQueryBuilder::addDataSource(tableNum(CustTable))
       .count(fieldNum(CustTable, recID))
       .exists(tableNum(CustTrans))
       .link(fieldNum(CustTable, AccountNum),
             fieldNum(CustTrans, AccountNum))
           .matches(fieldNum(CustTrans, AmountCur), '>100')
Вот что генерит
X++:
SELECT COUNT(A.RECID) FROM CUSTTABLE A WHERE (A.DATAAREAID='dat') AND EXISTS (SELECT 'x' FROM CUSTTRANS B WHERE ((B.DATAAREAID='dat') AND ((B.AMOUNTCUR>1.E2) AND (A.ACCOUNTNUM=B.ACCOUNTNUM)))) OPTION(FAST 5)
За это сообщение автора поблагодарили: Prof (2).
Старый 12.10.2007, 23:37   #18  
Михаил Андреев is offline
Михаил Андреев
Участник
Компания АМАНД
Лучший по профессии 2009
 
1,295 / 239 (10) ++++++
Регистрация: 09.11.2001
Адрес: Химки, Московская область
Цитата:
Сообщение от Prof Посмотреть сообщение
В обычном SQL это выглядело бы так:
select count(DISTINCT AccountNum) from custTrans where AmountCur > 1000
Перевожу на русский - посчитать количество клиентов, сумма проводки по которым больше 1000.

как это сделать с помощью Query?
Общий оборот считать или просто проверять наличие проводок на сумму > 1000?
Тогда годится что-то типа такого кода:
X++:
select count(RecId)
        from CustTable
        exists join CustTrans
            where CustTrans.AccountNum == CustTable.AccountNum
                && CustTrans.AmountMST > 1000;
Кстати. Это именно запрос, построенный belugin, но на человеческом языке
__________________
Михаил Андреев
https://www.amand.ru

Последний раз редактировалось Михаил Андреев; 12.10.2007 в 23:39.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
передача параметров в запрос while select tolstjak DAX: Программирование 13 15.02.2009 19:39
Почему join запрос разбивается на подзапросы!? 3oppo DAX: Программирование 59 28.06.2007 11:52
Как построить запрос? Янка DAX: Программирование 11 23.06.2006 10:22
Не могу полчить данные из таблицы velk DAX: Программирование 2 04.04.2006 16:05
Что-то не могу запрос сконструировать... chi DAX: Программирование 9 18.11.2005 11:55

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

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

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