Согласованность структуры имеет решающее значение при манипулировании строками. Предположим, что в строке всегда будет 20 цифр, и каждая запись будет иметь значение.
Рассчитайте 20 столбцов и сложите их вместе для итога - вот 2:
SELECT Quotes.*, Mid([Data],1,1)*53 AS A, Mid([Data],2,1)*71 AS B, [A]+[B] AS Total FROM Quotes;
Может вытащить весовой коэффициент из таблицы. DLookup - это один из способов, но агрегирование домена может привести к снижению производительности в большом наборе данных, поэтому, если весовые коэффициенты никогда не изменятся, вероятно, не нужно этого:
SELECT Quotes.Data, Mid([Data],1,1)* DLookup("Weight","Factors","ID=1") AS A, Mid([Data],2,1)* DLookup("Weight","Factors","ID=2") AS B, [A]+[B] AS Total FROM Quotes;
Декартово отношение с запросом агрегированных вычислений с использованием таблиц данных и весовых коэффициентов может вычислять Total - Декартово также может работать медленно с большим набором данных:
SELECT Quotes.ID, Sum(Mid([Data],[Factors].[ID],1)*[Weight]) AS Total
FROM Factors, Quotes
GROUP BY Quotes.ID;
Пользовательская функция VBA может возвращать только сумму. Вызовите эту функцию из запроса или текстового поля. Весовые коэффициенты можно извлечь из таблицы или жестко закодировать в массиве.
Function GetTotal(strD) As Long
Dim rs As DAO.Recordset, x As Integer
Set rs = CurrentDb.OpenRecordset("SELECT Weight FROM Factors ORDER BY ID")
For x = 1 To 20
GetTotal = GetTotal + Mid(strD, x, 1) * rs!Weight
rs.MoveNext
Next
End Function