您好我有從表票據與名稱數量一列一列的總和 我想,顯示數量列這樣的運行總和列:如何獲得運行在SQL Server
Qty Run_Sum
1 1
2 3
3 6
4 10
5 15
建議我一些適當的方法,使運行某些thankx
您好我有從表票據與名稱數量一列一列的總和 我想,顯示數量列這樣的運行總和列:如何獲得運行在SQL Server
Qty Run_Sum
1 1
2 3
3 6
4 10
5 15
建議我一些適當的方法,使運行某些thankx
如果RDBMS支持窗口功能,
爲SQL Server 2012
SELECT Qty,
SUM(Qty) OVER (ORDER BY Qty) AS CumulativeTOTAL
FROM tableName
爲SQL Server 2008
SELECT a.Qty, (SELECT SUM(b.Qty)
FROM TableName b
WHERE b.Qty <= a.Qty)
FROM TableName a
ORDER BY a.Qty;
我認爲子查詢會很慢 – vikas 2013-02-19 09:14:03
下面是使用Oracle /分析函數的示例:
select id, qty, sum(qty) over(order by id asc) run_sum
from test;
親愛的我使用sql server請提供一些示例代碼在sql server – user1448783 2013-02-19 09:00:35
這隻適用於sql server 2012。 – 2013-02-19 09:05:51
是的,謝謝你指出。這是一個更新的查詢(http://www.sqlfiddle.com/#!3/6ac1f/5):'select id,qty,(select sum(qty) from test where id <= t.id)run_sum 從測試t;' – 2013-02-19 09:07:34
SELECT Qty,
SUM(Qty) OVER (ORDER BY Qty) Run_Sum
FROM t ORDER BY Qty
對於SQLServer的前2012:
select Qty,
(select sum(Qty) from t where Qty<=t1.Qty)
from t t1 order by Qty
或者你也可以不用子查詢:
select t1.Qty, sum(t2.Qty)
from t t1
join t t2 on (t1.Qty>=t2.Qty)
group by t1.Qty
order by t1.Qty
這隻適用於SQL Server 2012,不低於它。 – 2013-02-19 09:05:31
@JW:和Oracle和DB2和Postgres,... – 2013-02-19 09:06:19
加入查詢之前的SQLServer版本 – valex 2013-02-19 09:07:54
入住這
DECLARE @TEMP table
(
ID int IDENTITY(1,1),
QUANTITY int
)
INSERT INTO @TEMP
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 8 UNION ALL
SELECT 7 UNION ALL
SELECT 5 UNION ALL
SELECT 1
SELECT t.QUANTITY AS Qty, SUM(t1.QUANTITY) AS Run_Sum
FROM @TEMP t
INNER JOIN @TEMP t1
ON t1.ID <= t.ID
GROUP BY t.ID, t.QUANTITY
ORDER BY t.ID
;with cte as (
select top 1 Qty, Qty as RunningSum
from Bills
order by Qty
union all
select t.Qty, cte.RunningSum + t.Qty
from cte
inner join Bills t on cte.Qty + 1 = t.Qty
)
select * from cte
這不是正確的答案。 – Varun 2014-12-29 13:36:22
@mahmud: 看看這給
DECLARE @Bills table
(
QUANTITY int
)
INSERT INTO @Bills
SELECT 2 UNION ALL
SELECT 6 UNION ALL
SELECT 7 UNION ALL
SELECT 1 UNION ALL
SELECT 3 UNION ALL
SELECT -5 UNION ALL
SELECT 5 UNION ALL
select 1
;with cte as (
select top 1 QUANTITY, QUANTITY as RunningSum
from @Bills
order by QUANTITY
union all
select t.QUANTITY, cte.RunningSum + t.QUANTITY
from cte
inner join @Bills t on cte.QUANTITY + 1 = t.QUANTITY
)
select * from cte
運行總和是多少? 1 1 2 3 5 8 13 21 34 ..... [斐波那契系列]將是運行總和的一個例子。 – Achrome 2013-02-19 08:53:01
你正在使用什麼[RDBMS](http://en.wikipedia.org/wiki/Relational_database_management_system)? 'SQL Server'? 'MySQL'? 'Oracle'? 'DB2'? – 2013-02-19 08:54:11
我正在使用sql服務器2008 – user1448783 2013-02-19 08:58:31