我希望这是有道理的,因为我要做的是基于现有行的其他列的SUM行。我尝试了几种不同的方式,我希望现在接近的是我在这里所拥有的。这不是我的完整SQL,但希望这个小例子能让我顺利进行
SELECT Price,SUM(Item) from table where Price >= Price group by Price
Sample Data
| PRICE | ITEM |
|-------|-------|
| 1.00 | 5 |
| 2.00 | 9 |
| 3.00 | 2 |
Hopeful Result
| PRICE | ITEM |
|-------|-------|
| 1.00 | 5 |
| 2.00 | 14 |
| 3.00 | 16 |
实际结果或多或少是我期望的样本数据,因为我按Price分组,所以它返回像这样的行是有意义的。我似乎无法想到将Price包含在我的选择中,而无需对其进行分组或使用聚合。我想我可以用内部选择进行这种类型的计算,但我希望有一种不同的方式,因为我的实际查询有很多连接,如果我走这条路线可能会变得混乱。
感谢您的帮助。
答案 0 :(得分:2)
如果您正在使用SQL Server 2012 ...
Select price, item, sum(item) OVER(order by price rows unbounded preceding) as runningtotal
from sample
答案 1 :(得分:1)
您可以使用子查询来完成此操作,但更有效的方法可能是使用CROSS/OUTER APPLY
。这取决于您的具体数据。我提供了以下两种方法:根据您的具体数据查看哪一种运行得更快。
子查询方法
SELECT DISTINCT op.Price, (SELECT SUM(ip.Item) FROM table ip WHERE ip.Price <= op.Price) as ITEM FROM table op ORDER BY op.Price ASC
外部申请方法
SELECT DISTINCT op.Price, a.Items
FROM table op
OUTER APPLY (SELECT SUM(ip.Item) as Items FROM TABLE ip WHERE ip.Price <= op.Price) a
ORDER BY op.Price ASC
答案 2 :(得分:0)
可能你正在尝试做类似下面的事情。使用同一个表的self join
。
SELECT t1.Price, SUM(t2.Item)
FROM table1 t1,
table1 t2
WHERE t2.Price <= t1.Price
GROUP BY t1.Price
ORDER BY t1.price;