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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.08.2009, 11:59   #1  
plumbum is offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Регистрация: 07.12.2007
Адрес: Vienna, AT
Нет, в общем-то я хотел констатировать факт, что если суммировать по тому же полю, по которому группировать, то желаемого результата не будет.

Задача была выбрать количество разных поставщиков, для которых созданы закупки...
__________________
http://www.axdevposts.blogspot.com
Пришел, уведел.... отойди, дай другому увидеть!
Старый 05.08.2009, 12:50   #2  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от plumbum Посмотреть сообщение
Нет, в общем-то я хотел констатировать факт, что если суммировать по тому же полю, по которому группировать, то желаемого результата не будет.

Задача была выбрать количество разных поставщиков, для которых созданы закупки...
Аксапта-SQL это лишь жалкое подобие(подмножество) SQL, поэтому сложно требовать от него функций расширяющих SQL, как вы хотите.

Вы пытались сделать вот такой запрос, вот выполните его и посмотрите, что выдаёт нормальный SQL, который вы хотели построить:
X++:
Select   orderaccount, count(orderaccount), count(*)
    From Purchtable
Group By orderaccount
Но из-за особенностие работы Аксапты с табличными переменными, вы не получите даже этого.

Вам же нужен один из следующих запросов:
X++:
Select Count ( Distinct Orderaccount )
  From Purchtable
/
Select Count ( * )
  From ( Select  Orderaccount
            From Purchtable
        Group By Orderaccount )
Ни того ни другого Аксапта не поддерживает, к сожалению.

Как вариант - воспользуйтесь direct sql.
Примерный код для 3-ки (тестировал на Оракле):
X++:
static void Job22(Args _args)
{
    dictTable   dictTable = new DictTable(tableNum(PurchTable));

    Connection  con  = new Connection();
    ResultSet   rs;
    Statement   stmt;

    str         sql;
    str         dataareaid;

    int         cnt;
    ;

    if (dictTable.dataPrCompany())
    {
        DataAreaId = curext();

        if ( SqlSystem::databaseBackendId() == DatabaseId::Oracle )
            dataareaid = strFmt(new SqlSystem().monocaseFmt(),dataareaid);
    }

     sql     = strFmt("Select Count ( Distinct %1 ) From %2 where %3 = \'%4\'",
                      dictTable.fieldName(fieldnum(PurchTable, OrderAccount), DBBackend::SQL),
                      dictTable.name(DbBackend::SQL),
                      dictTable.fieldName(fieldnum(PurchTable, DataAreaId), DBBackend::SQL),
                      DataAreaId);

    info(sql);

    stmt  = con.createStatement();
    rs    = stmt.executeQuery(sql);

    if (rs.next())
    {
        cnt = rs.getInt(1);
    }

    info(int2str(cnt));
}
На более поздних версия надо будет ещё включать разрешения через SqlStatementExecutePermission...
__________________
Zhirenkov Vitaly
За это сообщение автора поблагодарили: plumbum (1).
Теги
distinct, query, запрос (query)

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
QueryBuildDataSource - динамически if_maks DAX: Программирование 6 07.04.2006 13:39
Как заменить distinct? Zeratul DAX: Программирование 4 21.10.2005 16:10
Непонятное поведение векторных полей в QueryBuildDataSource. Lemming DAX: Программирование 2 12.05.2005 17:43
Вопрос по QueryBuildDataSource, QueryBuildRange и QueryRun Paul_ST DAX: Программирование 9 11.02.2004 17:13
Помогите разобраться с QueryBuildDataSource raz DAX: Программирование 10 04.09.2003 12:03

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

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

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