Вы можете принять полностью SQL-подход:
SELECT SUM(TotalAmount) AS Amount
FROM ( SELECT Amount * (1 + DATEDIFF('d', @StartDate, EndDate)) AS TotalAmount,
(1 + DATEDIFF('d', @StartDate, EndDate)) AS Days,
Amount AS DailyRate
FROM tblPricePeriod
WHERE @StartDate >= StartDate
AND @StartDate <= EndDate
AND @EndDate > EndDate
AND ApartmentID = @ApartmentID
UNION ALL
SELECT Amount * (DATEDIFF('d', @StartDate, @EndDate)), DATEDIFF('d', @StartDate, @EndDate), Amount
FROM tblPricePeriod
WHERE @StartDate >= StartDate
AND @StartDate <= EndDate
AND @EndDate >= StartDate
AND @EndDate <= EndDate
AND ApartmentID = @ApartmentID
UNION ALL
SELECT Amount * (1 + DATEDIFF('d', StartDate, EndDate)), (1 + DATEDIFF('d', StartDate, EndDate)) , Amount
FROM tblPricePeriod
WHERE @StartDate < StartDate
AND @EndDate > EndDate
AND ApartmentID = @ApartmentID
UNION ALL
SELECT Amount * (DATEDIFF('d', StartDate, @EndDate)), DATEDIFF('d', StartDate, @EndDate) , Amount
FROM tblPricePeriod
WHERE @StartDate < StartDate
AND @EndDate <= EndDate
AND @EndDate > StartDate
AND ApartmentID = @ApartmentID
) AS Data
Поскольку Access не позволяет комментировать, я не смог аннотировать запрос. Подзапрос состоит из 4 частей: верхняя часть предназначена для даты окончания периода ценового периода во время посещения, вторая - для случая, когда посещение полностью попадает в один ценовой период, третья - для посещения, когда посещение пересекает весь ценовой период, и четвертая когда ценовой период начинается во время посещения. Надеюсь, это понятно.
Все, что вам тогда нужно будет сделать, это добавить параметры @ApartmentID, @StartDate и @EndDate к вашему ExecuteDataset
методу, который в любом случае лучше подходит, чем объединение строк.