2010-12-01 5 views
2

Необходимо выполнить общее количество таблицы на основе даты и другого столбца. Скажем, у меня есть следующая таблица под названием Sales:SQL Running Total using CROSS JOIN

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 
+1

Mashrur: Добро пожаловать в SO. Но, пожалуйста, обратите внимание на свое форматирование с будущими вопросами. Было бы также полезно узнать, какой колорит СУБД вы используете. Будут очень разные подходы к этой проблеме с разными БД. – 2010-12-01 15:14:27

ответ

2

Не нужно просто добавить Client в инфу?

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 

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

0

Здесь вы идете.

 

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