Добрый день, форумчане. В связи с недостатком знаний столкнулся о стену, которую не могу пройти. Опишу ситуацию
Стоит задача из таблички в бд получать записи, а после их обработки эти записи обновлять в бд с изменённым столбцом.

Необходимо группировать следующим образом.
В первую группу будут входить все записи, у которых с 7 по 10 символ значения разные. во второй тоже самое, в третьей тоже самое.
Пример:
Основываясь на первом скриншоте смотрим на этот скриншот

набор данных одинаковый, просто я сгруппировал и мы можем видеть, что в столбце lcode1 отображается количество записей. Как вы уже вычитали, группировка идёт основываясь на 4 символах каждой записи. для наглядности перенесу это в excel
Идея проста, получить данные, массивом прибавить буквы к названию основывась на символах из столбца и закинуть в табличку обратно.
Вот только я понимаю, что я цикл сделал не правильно, а как правильно сделать - не знаю. Обращаюсь к вам в надежде, что дадите подсказку как поступить в данной ситуации
Цитата:
dm.aqSqlTrud.SQL.Text := 'SELECT count(right(left(lcode, 10), 4)) as lcode1, right(left(lcode, 10), 4) as kkk'+
' FROM pf' +
' WHERE Left(lcode, 6) in (' +quotedstr('117К21')+','+quotedstr('117И22')+','+q uotedstr('117И31')+','+quotedstr('117И26')+','+quo tedstr('117И20')+','+
''+quotedstr('117И34')+','+quotedstr('117И35')+',' +quotedstr('117900')+','+quotedstr('117930')+'' +
' group by right(left(lcode, 10), 4)';
dm.aqSqlTrud.Open;
if dm.aqSqlTrud.RecordCount > 0 then
begin
Zasl;
end;
procedure Zasl();
var
sum, lcodesec, masssec: string;
r: string;
c: AnsiChar;
RusArr: array['А'..'Я'] of AnsiChar;
id: integer;
begin
lcodesec = '';
masssec = '';
id = '';
dm.aqSqlTrud.SQL.Text := 'SELECT lcode, nm, kol, prd, zak_nm' +
' FROM pf' +
' WHERE Left(lcode, 6) in (' + quotedstr('117К21') + ',' + quotedstr('117И22') ',' + quotedstr('117И31') ',' + quotedstr('117И26') ',' + quotedstr('117И20') ',' +
'' + quotedstr('117И34') ',' + quotedstr('117И35') ',' + quotedstr('117900') ',' + quotedstr('117930') '' +
' order by right(left(lcode,10),4)';
dm.aqSqlTrud.Open;
for i := 1 to DM.aqSqlTrud.RecordCount do
begin
RusArr[c] := c;
r: = DM.aqSqlTrud.FIELDBYNAME('zak_nm').AsString
id = DM.aqSqlTrud.FIELDBYNAME('id').AsString
for c := 'А' to 'Я' do
if copy(lcodesec, 7, 4) = copy(art, 7, 4) then
r := r + '_' + quotstr(RusArr);
if r = masssec then
begin
r := masssec;
end
else
r := r + '_' + quotstr(RusArr[c]);
end;
lcodesec = : art;
masssec := r;}
dm.aqDiv.SQL.Text := 'UPDATE pf SET zak_nm = ' + quotedstr(r) + ' WHERE id=' + quotedstr(id) + ';
dm.aqDiv.Open;
dm.aqSqlTrud.Next;
end;
|