使用交叉联接运行Total的SQL

使用交叉联接运行Total的SQL,sql,join,cross-join,Sql,Join,Cross Join,需要基于日期和另一列运行表的总计。假设我有一个名为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

需要基于日期和另一列运行表的总计。假设我有一个名为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   1
6   Fuller, A    1
7   Smith, J     2
8   Johnson, B   2
9   Lee, M       1

您不需要将
客户机
添加到联接中吗

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
选择一天、一个客户、和(1)作为RunningTotal
来自销售a
在b日加入销售b。给你


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

选择a.天、a.客户、总和(1)作为RunningTotal
来自dbo.Sales a,dbo.Sales b

b.Day Mashrur:欢迎来到SO。但请注意你的格式和未来的问题。了解您使用的RDBMS的风格也会很有帮助。对于这个问题,不同的DBs会有非常不同的方法。

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