SQL Server与where或条件相加

时间:2014-06-10 21:00:13

标签: sql sql-server sum

我希望这是有道理的,因为我要做的是基于现有行的其他列的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包含在我的选择中,而无需对其进行分组或使用聚合。我想我可以用内部选择进行这种类型的计算,但我希望有一种不同的方式,因为我的实际查询有很多连接,如果我走这条路线可能会变得混乱。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

如果您正在使用SQL Server 2012 ...

Select price, item, sum(item) OVER(order by price rows unbounded preceding) as runningtotal
from sample

http://sqlfiddle.com/#!6/36e9f/1/0

答案 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

查看DEMO Here

SELECT t1.Price, SUM(t2.Item)
FROM   table1 t1,
       table1 t2
WHERE t2.Price <= t1.Price
GROUP BY t1.Price
ORDER BY t1.price;