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