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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.05.2004, 10:58   #1  
Хилари is offline
Хилари
Решили жить вечно?
Аватар для Хилари
 
33 / 10 (1) +
Регистрация: 15.04.2004
как писать select с групировкой
пишу код:

PHP код:
while select <полеfrom <переменная таблицыorder by <полеgroup by <поле
Компилятор генерит ошибку синтаксиса. Кажется по умолчанию компилятор сортирует по полям group by, но здесь мне нужна сортировка не по списку полей в group by
Старый 18.05.2004, 11:22   #2  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Кажется по умолчанию компилятор сортирует по полям group by, но здесь мне нужна сортировка не по списку полей в group by
А почему ? Если Вы пишете group by - то в списке полей после select могут стоять только поля, по которым происходит группировка и агрегаты.
Соответстсвенно по ним можно и сортировать.
Это я про SQL.
Старый 18.05.2004, 11:39   #3  
Хилари is offline
Хилари
Решили жить вечно?
Аватар для Хилари
 
33 / 10 (1) +
Регистрация: 15.04.2004
Select field1, field3, sum(field2)
from table1
group by field1, field3
order by field3, field2, field1

Как?
Старый 18.05.2004, 12:01   #4  
mit is offline
mit
Участник
Аватар для mit
 
386 / 36 (2) +++
Регистрация: 15.01.2003
Адрес: Moscow
Руководство разработчика топик
"Select statement"
Syntax of select

SelectStatement = select Parameters
Parameters = [ [ FindOptions ] [ FieldList from ] ] TableVariable [IndexClause] [ Options ] [ Where Clause ] [ JoinClause ]
FindOptions = reverse | firstfast | firstonly | forupdate | nofetch
FieldList = Field { , Field } | *
Field = Aggregate ( FieldIdentifier ) | FieldIdentifier
Aggregate = sum | avg | minof | maxof | count
Options = (order by | group by ) FieldIdentifier [ Direction ] { , FieldIdentifier [ Direction ] }
IndexCaluse = index Idx | index hint idx
Direction = asc | desc
WhereClause = where Expression
JoinClause = [exists | notexists | outer ] join Parameters
Старый 18.05.2004, 12:04   #5  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
ОК. Забудьте про Аксапту - нет Аксапты, есть Вы и СУБД - приведите мне название этого чудо-сервера который проглотит Ваш запрос и при этом грязно не ругнется

Поищите в инете "Понимание SQL" Грубера - его обычно рекомендуют изучающим SQL. Кроме того его не сложно найти в электронном виде.
Старый 18.05.2004, 12:25   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
приведите мне название этого чудо-сервера который проглотит Ваш запрос и при этом грязно не ругнется
Если я правильно понял, то нужно просто отсортировать еще и по столбцу с СУММОЙ. А это может сделать любой сервер. Например, в синтаксисе MS SQL вполне корректно выполнится запрпос вида:

SELECT field1, SUM(Field2)
FROM MyTable
GROUP BY Field1
ORDER BY 2,1

Но в Axapta - это невозможно. Единственное решение - это СНАЧАЛА выполнить запрос, а ПОТОМ отсортировать этот запрос в нужной последовательности.

Сортировку можно сделать при помощи дополнительных объектов MAP или RecordSortedList.

Единственная проблема - это то, что придется построчно загонять информацию в эти объекты. Т.е. будет 2 цикла: один - выполнить запрос и загнать его результат в объект для сортировки, второй - сканирование отсортированного объекта.

PS. Если речь идет об Axapta 3.0, то попробуй сделать этот запрос через View
Старый 18.05.2004, 13:05   #7  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
На всякий случай, по поводу первого постинга и ошибки компиляции: в АХАРТА нельзя использовать order by и group by в одном запросе. Раздел справки "Differences between X++ and SQL in handling group by": "... As opposed to SQL, X++ does not allow group by and order by in the same select statement. This means that explicit sorting is not possible. ..."
__________________
Андрей.
Старый 18.05.2004, 13:11   #8  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Если я правильно понял, то нужно просто отсортировать еще и по столбцу с СУММОЙ.
Тогда бы запрос выглядел например так:

Select field1, field3, sum(field2) as sumfield
from table1
group by field1, field3
order by field3, sumfiled, field1

А просили вот это:


Цитата:

Изначальное сообщение Хилари:

Select field1, field3, sum(field2) from table1 group by field1, field3 order by field3, field2, field1
Кроме того, была сказана такая фраза:

Цитата:
Кажется по умолчанию компилятор сортирует по полям group by, но здесь мне нужна сортировка не по списку полей в group by
Хотя, думаю автору сообщения виднее, что она имела в виду
Старый 18.05.2004, 13:16   #9  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Сортировку можно сделать при помощи дополнительных объектов MAP или RecordSortedList.
При этом желательно трезво оценивать размер данных, которые могут там оказаться. Иначе есть вероятность того, что либо кончится место , отведенное под swap, либо возникнет ошибка smartheep.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
2 while select или join? _scorp_ DAX: Программирование 9 23.01.2009 16:02
Разница NotInTTS и Found Logger DAX: База знаний и проекты 6 18.09.2008 12:35
gatesasbait: Reverse keyword on Select Statements Blog bot DAX Blogs 0 08.02.2008 00:10
Fred Shen: Always use recId to know if a select statement returns a record Blog bot DAX Blogs 0 28.10.2006 16:40
Вопрос про Demand Planner slava09 DAX: Функционал 4 25.09.2006 11:43

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

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

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