Форумы HiProg.com - MS ACCESS, VBA, VB

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

ник: Анатолий (Киев)
SELECT Исходная.Val, (SELECT Max(T1.Org) AS [Max-Org]
FROM Исходная AS T1
WHERE (((T1.Val)=Исходная.Val) AND ((T1.Org)=1))) AS IsOrg1, Исходная.Org, Min(Исходная.ID) AS MinID, Max(Исходная.ID) AS MaxID
FROM Исходная
GROUP BY Исходная.Val, Исходная.Org;

Этот запрос группирует по Val и Org, показывает Min ID и Masx ID, а также для каждого Val возвращает признак наличия Org=1 (IsOrg1 возвращакт 1 или Null). В каждой записи достаточно информации, чтоб после простой логики определить значение IDError и выполнить запрос на обновление записей.
Например для записи:

Val               IsOrg1  Org      MinID       MaxID
tir nbs lrrs               14     12000078    12000285

Org<>1 (14), нет записей с этим Val и Org=1 (IsOrg1=Null) и есть записи с разными индексами (12000078 <> 12000285), то в записях с этим Val, Org и ID = MinID (первая запись) меняем IDError на Null, а для ID <> MinID - на 2. Т.е. запрос типа:

UPDATE Исходная SET Исходная.IDError = IIf([Исходная]![ID]=12000078,Null,2)
WHERE (((Исходная.Val)='tir nbs lrrs') AND ((Исходная.Org)=14));

ИМХО, 926 операций обновления (столько возвращает запрос) быстрее, чем 1732 (записей в таблице).


Ваше имя:

Пароль:

Цитировать: [quote][/quote] Код: [code][/code]
Жирный: [b][/b] Наклонный: [i][/i]
URL: [url][/url] 

Сообщение:

 Размер файла не более 50 Кбт. Большие файлы можно размещать на www.slil.ru

Прикрепить:

 

Для вставки смайлов в текст щелкните по значку.