Есть ли альтернатива Dsum????

baitokberik
Дата: 21.12.2015 11:42:42
Мир Вам!
Есть проблемка! Применяю Dsum к моей здоровенной базе а она думает по пол года! Какая есть более быстрая альтернатива Dsum?
Для примера прикладываю файл.
Akina
Дата: 21.12.2015 12:48:00
baitokberik
Какая есть более быстрая альтернатива Dsum?

Нормальный JOIN.
sdku
Дата: 21.12.2015 13:07:34
baitokberik,
SELECT Sum(tbl_1.СУММ) AS [Sum-СУММ], tbl.СУММ, tbl.ID2, tbl.ID
FROM tbl INNER JOIN tbl AS tbl_1 ON tbl.ID2 = tbl_1.ID2
GROUP BY tbl.СУММ, tbl.ID2, tbl.ID;
tbl_1-копия tbl (добавьте в бланк запроса tbl повторно. Должно работать пошустрей)
sdku
Дата: 21.12.2015 13:27:16
вдогонку:самый простой вариант-создать ОТЧЕТ используя свойство "сумма с накоплением"
baitokberik
Дата: 21.12.2015 13:52:01
sdku, попробовал Ваш вариант, но дало только общие суммы! Прилагаю файл! запрос2!
baitokberik
Дата: 21.12.2015 13:53:27
Akina, не понял, что Вы имели ввиду???
-Практикант-
Дата: 21.12.2015 14:10:05
baitokberik,

Вариант 1
SELECT t1.ID, t1.ID2, t1.СУММ, 
       (SELECT Sum(t2.СУММ) FROM tbl AS t2 WHERE (t2.ID<=t1.ID) AND (t1.ID2=t2.ID2)) AS СУММ2
FROM tbl AS t1;

Вариант 2
SELECT t1.ID, t1.ID2, t1.СУММ, Sum(t2.СУММ) AS СУММ2
FROM tbl AS t1 INNER JOIN tbl AS t2 ON (t2.ID<=t1.ID) AND (t1.ID2=t2.ID2)
GROUP BY t1.ID, t1.ID2, t1.СУММ

Вариант 3
Добавить в таблицу tbl поле СУММ2 и воспользоваться процедурой, заполняющей его
Sub AddSum()
  Dim id2&, sq$, sm#
  sq = "SELECT * FROM tbl ORDER BY ID2, ID"
  With CurrentDb.OpenRecordset(sq)
    id2 = 0
    Do Until .EOF
      If id2 <> !id2 Then sm = 0: id2 = !id2
      sm = sm + !СУММ
      .Edit: !СУММ2 = sm: .Update
      .MoveNext
    Loop
  End With
End Sub
baitokberik
Дата: 21.12.2015 14:37:54
Спасибо большое Буду пробовать!
sdku
Дата: 21.12.2015 18:59:57
sdku
вдогонку:самый простой вариант-создать ОТЧЕТ используя свойство "сумма с накоплением"

см.Отчет1
baitokberik
Дата: 24.12.2015 09:10:56
SELECT t1.ID, t1.ID2, t1.СУММ,
(SELECT Sum(t2.СУММ) FROM tbl AS t2 WHERE (t2.ID<=t1.ID) AND (t1.ID2=t2.ID2)) AS СУММ2
FROM tbl AS t1;


Оказался Самым быстро действенным вариантом! Но почему то при интеграции под мою БД не даёт! Что Я сделал не так????

SELECT t1.Код, t1.Основной, t1.Поставщик, t1.Оборот, t1.НДС, t1.ДоляОборот, (SELECT Sum(t2.ДоляОборот) FROM 8РК-3 AS t2 WHERE (t2.Код<=t1.Код) AND (t1.Основной=t2.Основной)) AS СУММ2, t1.ДоляНДС, (SELECT Sum(t2.ДоляНДС) FROM 8РК-3 AS t2 WHERE (t2.Код<=t1.Код) AND (t1.Основной=t2.Основной)) AS СУММ3
FROM 8РК-3 AS t1