Итоги SQL с использованием CROSS JOIN - PullRequest
2 голосов
/ 01 декабря 2010

Требуется подведение итогов таблицы на основе даты и другого столбца.Скажем, у меня есть следующая таблица с именем Sales:

Day      Client

1        Smith, J
3        Johnson, B
6        Fuller, A
7        Smith, J
8        Johnson, B
9        Lee, M

Я выполняю следующий запрос:

SELECT a.Day, a.Client, SUM(1) AS RunningTotal
FROM Sales a CROSS JOIN Sales b
WHERE (b.Day <= a.Day) 
GROUP BY a.Day, a.Client
ORDER BY a.Day

Это дает мне следующее:

Day Client       RunningTotal

1   Smith, J     1
3   Johnson, B   2
6   Fuller, A    3
7   Smith, J     4
8   Johnson, B   5
9   Lee, M       6

Но этотолько наполовину правильно.Я хочу, чтобы итоговая сумма была основана на дне И клиенте.Таблица, которую я хочу, выглядит следующим образом:

Day Client       RunningTotal

1   Smith, J     1
3   Johnson, B   1
6   Fuller, A    1
7   Smith, J     2
8   Johnson, B   2
9   Lee, M       1

Ответы [ 2 ]

2 голосов
/ 01 декабря 2010

Разве вам не нужно просто добавить Client в JOIN?

SELECT a.Day, a.Client, SUM(1) AS RunningTotal
FROM Sales a 
JOIN Sales b ON b.Day <= a.Day and a.Client = b.Client 
GROUP BY a.Day, a.Client
ORDER BY a.Day

Кстати: этот подход для расчета промежуточных итогов действительно подходит только для небольших входных наборов. Требуемая работа растет в геометрической прогрессии.

0 голосов
/ 01 декабря 2010

Вот, пожалуйста.


Select a.Day, a.Client, SUM(1) AS RunningTotal
From dbo.Sales a, dbo.Sales b
Where b.Day <= a.Day And a.Client = b.Client
Group By a.Day, a.Client
Order By a.Day

...