Сортирует записи в выбранной в данный момент таблице и выводит отсортированные записи в новую таблицу.

SORT TO TableName ON FieldName1 [/A | /D] [/C]
   [, FieldName2 [/A | /D] [/C] ...]   [ASCENDING | DESCENDING]
   [Scope] [FOR lExpression1] [WHILE lExpression2]
   [FIELDS FieldNameList   | FIELDS LIKE Skeleton
   | FIELDS EXCEPT Skeleton]   [NOOPTIMIZE]

Параметры

TableName

Задает имя новой таблицы, предназначенной для отсортированных записей. Visual FoxPro предполагает, что файлы таблиц имеют расширение имени .dbf. Расширение .dbf присваивается автоматически, если вы задали имя файла без расширения.

ON FieldName1

Задает поле в выбранной в данный момент таблице, на базе которого будет производиться сортировка. Содержимое и тип этого поля будут определять порядок записей в новой таблице. По умолчанию сортировка производится в возрастающем порядке. Нельзя проводить сортировку по полям типа Memo или General.

Следующий пример сортирует таблицу по полю cust_id. Таблица customer открывается, затем она сортируется, создавая новую таблицу temp. Записи в таблице temp упорядочены по полю cust_id.

  CopyCode imageCopy Code
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer  && Opens Customer table
CLEAR
LIST FIELDS company, cust_id NEXT 3
SORT TO temp ON cust_id
USE temp
LIST FIELDS company, cust_id NEXT 3
WAIT WINDOW 'Now sorted on CUST_ID' NOWAIT

Можно задать имена еще нескольких полей (FieldName2, FieldName3), чтобы дополнительно упорядочить новую таблицу. Первое поле FieldName1 является полем первичной сортировки, второе поле FieldName2 - полем вторичной сортировки и т.д.

[/A | /D] [/C]

Для каждого поля, участвующего в сортировке, можно указать возрастающий или убывающий порядок сортировки. /A задает возрастающий порядок для данного поля, /D ѕ убывающий порядок. Опцию /A или /D можно задать для поля любого типа.

По умолчанию порядок сортировки по символьному полю определяется с учетом регистра символов. Если после имени символьного поля задать опцию /C, регистр будет игнорироваться. Опцию /C можно указывать в сочетании с опцией /A или /D: например /AC или /DC.

В следующем примере создается новая таблица clients. Таблица orders сортируется по полю order_date в возрастающем порядке и по полю freight в убывающем порядке.

  CopyCode imageCopy Code
USE orders
SORT TO clients ON order_date/A,freight/D
ASCENDING

Задает возрастающий порядок для всех полей, для которых не указана опция /D.

DESCENDING

Задает убывающий порядок для всех полей, для которых не указана опция /A.

Если опустить ASCENDING и DESCENDING, порядок сортировки по умолчанию будет возрастающим.

Scope

Задает диапазон сортируемых записей. Диапазон задается следующими предложениями: ALL, NEXT nRecords, RECORD nRecordNumber, и REST.

По умолчанию областью действия команды SORT являются все записи (предложение ALL).

FOR lExpression1

Задает сортировку только тех записей текущей таблицы, для которых логическое условие lExpression1 имеет значение "истина" (.T.). Предложение FOR позволяет выполнять условную сортировку, отсеивая ненужные записи.

Запрос, созданный командой SORT ... FOR, может быть оптимизирован по технологии Rushmore, если lExpression1 является оптимизируемым выражением. Для получения наивысшей производительности используйте в предложении FOR оптимизируемое выражение.

О выражениях, допускающих оптимизацию по технологии Rushmore, смотрите Оптимизация приложений.

WHILE lExpression2

Задает условие, в соответствии с которым записи из текущей таблицы включаются в процесс сортировки, пока логическое выражение lExpression2 остается истинным (.T.).

FIELDS FieldNameList

Задает поля исходной таблицы, которые следует включить в новую таблицу, создаваемую командой SORT. Если опустить предложение FIELDS, в новую таблицу включаются все поля исходной таблицы.

FIELDS LIKE Skeleton

Указывает, что в новую таблицу, создаваемую командой SORT, следует включить те поля исходной таблицы, которые соответствуют шаблону Skeleton.

FIELDS EXCEPT Skeleton

Указывает, что в новую таблицу, создаваемую командой SORT, следует включить все поля исходной таблицы, кроме тех, которые соответствуют шаблону Skeleton.

В шаблоне имен полей Skeleton можно использовать символы подстановки. Например, чтобы задать включение в новую таблицу всех полей, имена которых начинаются на буквы A и P, воспользуйтесь следующей командой:

  CopyCode imageCopy Code
SORT TO mytable ON myfield FIELDS LIKE A*,P*

Предложение LIKE может действовать в сочетании с предложением EXCEPT:

  CopyCode imageCopy Code
SORT TO mytable ON myfield FIELDS LIKE A*,P* EXCEPT PARTNO*
NOOPTIMIZE

Блокирует оптимизацию операции SORT по технологии Rushmore.

Для получения дополнительной информации, смотрите Команда SET OPTIMIZE и Использование оптимизации запросов Rushmore для ускорения доступа к данным.

Expand imageЗамечания

Порядок записей, вставляемых в новую таблицу, определяется одним или несколькими заданными полями текущей таблицы.

Caution noteВнимание

Убедитесь, что у вас достаточно места на диске, чтобы разместить новую таблицу и временные рабочие файлы, создаваемые в процессе сортировки. Для выполнения сортировки может потребоваться пространство на диске, втрое превышающее размер исходной таблицы. бъем свободного места на диске можно определить с помощью функций DISKSPACE( ) и SYS(2020). Если вам не хватило места на диске в процессе сортировки, Visual FoxPro отобразит предупреждение об ошибке и временные рабочие файлы будут удалены.

Поля символьного типа, содержащие цифры и пробелы, могут оказаться отсортированными не в том порядке, на какой вы рассчитываете. Числовые поля заполняются справа налево, и пустые позиции остаются слева. Символьные поля, напротив, заполняются слева направо, и пустые позиции остаются справа.

Например, если две записи в таблице включают символьное поле, которое в одной записи содержит число 1724, а в другой 18, и таблица сортируется по этому полю в возрастающем порядке, то запись с числом 1724 окажется перед записью с числом 18. Это объясняется тем, что Visual FoxPro считывает символы в поле символьного типа слева направо, и поскольку 17 (от числа 1724) меньше, чем 18, первым будет поставлено число 1724. Чтобы избежать подобных проблем, ставьте перед меньшими числами начальные нули (0018) или делайте такие поля числовыми.

Expand imageСмотрите также