нумерация записей с одновременной группировкой и сортировкой

JMK
Дата: 22.11.2006 18:27:28
добрый вечер всем
не могу решить следующую задачу, уже все мозги переломал, может кто поможет?
есть след. таблица [Таблица]:
КодЗаписи КодФирмы ...
1 1
2 1
3 1
4 2
5 3
6 1
7 2
8 3
9 2
нужно пронумеровать таблицу, сгруппировав по коду фирмы и отсортировав по коду записи в возрастающем порядке, т.е. результат следующий:
НомерПП КодЗаписи КодФирмы ...
1 1 1
2 2 1
3 3 1
4 6 1
5 4 2
6 7 2
7 9 2
8 5 3
9 8 3
максимум, до чего дошел, это следующее:
SELECT (SELECT Sum(1) FROM Таблица ПрЗапрос WHERE ПрЗапрос.КодФирмы & ПрЗапрос.КодЗаписи <= 
Запрос.КодФирмы & Запрос.КодЗаписи) AS НомерПП, Запрос.КодЗаписи, Запрос.КодФирмы
FROM Таблица AS Запрос
ORDER BY КодФирмы & КодЗаписи 
однако данная конструкция работает некорректно, т.к. числа склеиваются в строку и сравниваются естественно как строки, т.е. 1 и 14 (114 )будут стоять раньше чем 1 и 5 (15), а должно быть наоборот.
может у кого-нибудь будут идеи, как скорректировать эту конструкцию или вообще использовать что то другое?
заранее благодарен
mds_world
Дата: 22.11.2006 18:42:40
Вариантов достаточно. Например подклеивать ведущие нули слева, сравнивая длину строки. Если, скажем 1, то приписывать слева 5 нулей, если 1000, то 2 нуля (с запасом). Но мне кажется вам проще рассмотреть вариант с созданием дополнительного столбца в таблице где будет храниться числовой код, равный, например, сумме склеиваемых полей.
Владимир Саныч
Дата: 22.11.2006 18:45:37
JMK
однако данная конструкция работает некорректно, т.к. числа склеиваются в строку и сравниваются естественно как строки

Разумеется, потому что к ним применена операция сцепления строк &. Кстати, не так и плохо, только надо отформатировать так, чтобы соответствующие друг другу поля в разных строках занимали одинаковое число позиций. Например, если известно, что эти числа никогда не займут более 10 позиций, то можно сделать так: не
ПрЗапрос.КодФирмы & ПрЗапрос.КодЗаписи
а
Format(ПрЗапрос.КодФирмы, "0000000000") & Format(ПрЗапрос.КодЗаписи, "0000000000")
- и тогда 1 и 14 превратятся в 00000000010000000014, а 1 и 5 в 00000000010000000005, т.е. второе будет меньше.
Владимир Саныч
Дата: 22.11.2006 18:46:27
mds_world
числовой код, равный, например, сумме склеиваемых полей.

Нехорошо, потому что тогда 1 и 14 будет равно 2 и 13.
mds_world
Дата: 22.11.2006 18:51:13
Владимир Саныч
mds_world
числовой код, равный, например, сумме склеиваемых полей.

Нехорошо, потому что тогда 1 и 14 будет равно 2 и 13.
Да, конечно. Но найти числовую функцию, удовлетворяющую условию нетрудно, нужно только знать данные. Автор, скорее всего привел какие-то демонстрационные данные.
JMK
Дата: 23.11.2006 11:48:30
спасибо большое за подсказку, именно так и хотелось сделать, но недостаток опыта в программировании, а точнее его полное отсутствие :)), не позволили это реализовать сразу. хорошо когда есть старшие, более опытные товарищи :)
еще раз спасибо