2010-12-01 75 views
2

需要根据日期和另一列运行总计的表。说我有如下表名为Sales:使用CROSS JOIN的SQL运行总数

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。但请注意您的格式和未来的问题。了解您正在使用的RDBMS的风格也很有帮助。对于不同的数据库,这个问题将会有非常不同的方法。 – 2010-12-01 15:14:27

回答

2

难道你不需要在JOIN中添加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 

顺便说一句:这种计算运行总数的方法只适用于小输入集合。所需工作呈指数增长。

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