使用CROSS JOIN的SQL运行总数
问题描述:
需要根据日期和另一列运行总计的表。说我有如下表名为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
答
难道你不需要在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
顺便说一句:这种计算运行总数的方法只适用于小输入集合。所需工作呈指数增长。
答
你在这里。
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
Mashrur:欢迎来到SO。但请注意您的格式和未来的问题。了解您正在使用的RDBMS的风格也很有帮助。对于不同的数据库,这个问题将会有非常不同的方法。 – 2010-12-01 15:14:27