SQL |Совокупная стоимость с несколькими группировками и критериями - PullRequest
0 голосов
/ 25 июня 2011

Я пробовал много вариантов этого оператора SQL после долгих исследований этого сайта, а также других, но я что-то упустил

Моя таблица данных выглядит так:

.....Date.....Boolean...Group....Imp......Cost
....1/1/11.....TRUE.........A........High.......$100
....1/1/11.....FALSE........A........Med........$150
....1/1/11.....TRUE.........B........High.......$200
....2/1/11.....TRUE.........B........Low........$300

Для каждого месяца я хочу, чтобы совокупная стоимость была сгруппирована по группам и импам. Вот мой SQL-запрос прямо сейчас, но кумулятивные суммы (в моем намного большем наборе данных) отключены WAAAYYY.

SELECT t1.Date,
       t1.Group,
       t1.Imp,
       Sum(t2.Cost) AS RunTotal
FROM datatable t1
INNER JOIN datatable t2 ON t1.Date >= t2.Date
WHERE t1.Boolean=TRUE
GROUP BY t1.Date,
         t1.Group,
         t1.Imp

Обратите внимание, что я не могу использовать перекрестное соединение, так как я использую MS Access. Есть идеи, где ошибка?

Ответы [ 2 ]

0 голосов
/ 29 июля 2013

Если вы хотите, чтобы ваш промежуточный итог был для каждой группы и для каждого импа, вы должны также включить это в ваше объединение:

Select t1.Date, t1.Group, t1.Imp, Sum(t2.Cost) as RunTotal
From datatable t1 
Inner Join datatable t2 on t1.Group = t2.Group and t1.Imp = t2.Imp and t1.Date >= t2.Date
WHERE t1.Boolean=TRUE
GROUP BY t1.Date, t1.Group, t1.Imp

Прямо сейчас вы объединяетесь со всеми записями, где t1.Date> = t2.Date, что включает в себя записи для несоответствующей группы / импа. Просто запустите следующее:

Select t1.Date, t1.Group, t1.Imp, t2.Date, t2.Group, t2.Imp, t2.Cost
From datatable t1 
Inner Join datatable t2 on t1.Date >= t2.Date
WHERE t1.Boolean=TRUE

Вы должны увидеть записи t2.Cost, которые вам не нужны в вашей сумме.

0 голосов
/ 25 июня 2011

Вы пытались вообще не использовать Join? Это запрос, который я использовал, и он, кажется, работает правильно.

SELECT [Date], [Group], Img, SUM(Cost) AS RunTotal
FROM datatable WHERE [Boolean] = True
GROUP BY [Date], [Group], Img
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...