Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Подскажите пожалуйста.
Как пронумеровать на этапе загрузки записи.
Например
Load *, RowNo() as [Номер строки] ....
дает просто сквозную нумерацию, а нужна с отдельной по филиалу.
типа как в oracle
row_number() OVER (PARTITION BY filial ORDER BY ......) asc
Если количество записей существенное (от нескольких млн.) и хочется, чтобы "не тормозило", то про циклы лучше забывать, как и про любые операции ветвления, влияющие на последовательность исполнения команд.
Подобные по-определению "медленные конструкции" ветвления лучше заменять табличными операциями. Табличные операции работают на порядки быстрее.
Итого, если список записей приходящий в оператор Load является сгруппированным по филиалам, то разметка легко делается путем сравнения значения филиала текущей записи со значением филиала из предыдущей записи.
Пример см. ниже. Поле RowIDbyBranch - искомое. Поле RowID - оставил для того, чтобы можно было отследить первоначальный порядок записей.
Load
RowNo() as RowID,
If( IsNull( Peek(RowIDbyBranch)) or BranchName <> Peek(BranchName), 1, RangeSum( Peek(RowIDbyBranch), 1))
as RowIDbyBranch,
BranchName,
BranchData;
Load * Inline [
BranchName, BranchData
A, 10
A, 11
A, 9
B, 21
B, 22
B, 23
B, 24
B, 25
C, 33
C, 32
C, 31
C, 30
];
Результат - на картинке ниже:
Как-то так (возможно не лучший вариант, первое что пришло в голову):
Tab0:
load
*
from TABLE;
For Each varFilial in FieldValueList('Filial')
TAB:
load
*,
'$(varFilial)' & '-' & RecNo() as SubFilialID
resident Tab0
where Filial='$(varFilial)';
NEXT varFilial;
drop Table Tab0;
Не забудь пометить если помогло )
Если количество записей существенное (от нескольких млн.) и хочется, чтобы "не тормозило", то про циклы лучше забывать, как и про любые операции ветвления, влияющие на последовательность исполнения команд.
Подобные по-определению "медленные конструкции" ветвления лучше заменять табличными операциями. Табличные операции работают на порядки быстрее.
Итого, если список записей приходящий в оператор Load является сгруппированным по филиалам, то разметка легко делается путем сравнения значения филиала текущей записи со значением филиала из предыдущей записи.
Пример см. ниже. Поле RowIDbyBranch - искомое. Поле RowID - оставил для того, чтобы можно было отследить первоначальный порядок записей.
Load
RowNo() as RowID,
If( IsNull( Peek(RowIDbyBranch)) or BranchName <> Peek(BranchName), 1, RangeSum( Peek(RowIDbyBranch), 1))
as RowIDbyBranch,
BranchName,
BranchData;
Load * Inline [
BranchName, BranchData
A, 10
A, 11
A, 9
B, 21
B, 22
B, 23
B, 24
B, 25
C, 33
C, 32
C, 31
C, 30
];
Результат - на картинке ниже:
в конце load обязательно должно быть
order by BranchName
Выше в описании указано "Итого, если список записей приходящий в оператор Load является сгруппированным по филиалам,"