Сортирует записи в выбранной в данный момент таблице и выводит отсортированные записи в новую таблицу.
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
.Copy 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
в убывающем порядке.Copy 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, воспользуйтесь следующей командой:
Copy Code
SORT TO mytable ON myfield FIELDS LIKE A*,P*
Предложение LIKE может действовать в сочетании с предложением EXCEPT:
Copy Code
SORT TO mytable ON myfield FIELDS LIKE A*,P* EXCEPT PARTNO*
- NOOPTIMIZE
-
Блокирует оптимизацию операции SORT по технологии Rushmore.
Для получения дополнительной информации, смотрите Команда SET OPTIMIZE и Использование оптимизации запросов Rushmore для ускорения доступа к данным.
Замечания
Порядок записей, вставляемых в новую таблицу, определяется одним или несколькими заданными полями текущей таблицы.
![]() |
---|
Убедитесь, что у вас достаточно места на диске, чтобы разместить новую таблицу и временные рабочие файлы, создаваемые в процессе сортировки. Для выполнения сортировки может потребоваться пространство на диске, втрое превышающее размер исходной таблицы. бъем свободного места на диске можно определить с помощью функций DISKSPACE( ) и SYS(2020). Если вам не хватило места на диске в процессе сортировки, Visual FoxPro отобразит предупреждение об ошибке и временные рабочие файлы будут удалены. |
Поля символьного типа, содержащие цифры и пробелы, могут оказаться отсортированными не в том порядке, на какой вы рассчитываете. Числовые поля заполняются справа налево, и пустые позиции остаются слева. Символьные поля, напротив, заполняются слева направо, и пустые позиции остаются справа.
Например, если две записи в таблице включают символьное поле, которое в одной записи содержит число 1724, а в другой 18, и таблица сортируется по этому полю в возрастающем порядке, то запись с числом 1724 окажется перед записью с числом 18. Это объясняется тем, что Visual FoxPro считывает символы в поле символьного типа слева направо, и поскольку 17 (от числа 1724) меньше, чем 18, первым будет поставлено число 1724. Чтобы избежать подобных проблем, ставьте перед меньшими числами начальные нули (0018) или делайте такие поля числовыми.