2013-05-14 29 views
6

我在SQL Server 2008中查詢時遇到了問題,我搜索了互聯網,但是我什麼也沒找到,或者它沒有給我任何關於如何去做的想法。使用相同的ID列遞增求和列值

使用Northwind數據庫,我需要查詢表訂單明細,並選擇訂單ID和單價顯示這樣的事情,

OrderID - UnitPrice 
------------------------ 
10248  -  14.00 
10248  -  9.80 
10248  -  34.80 
10249  -  18.60 

的結果應該是:

OrderID - UnitPrice 
------------------------ 
10248  -  14.00 
10248  -  23.80 
10248  -  58.6 
10249  -  18.60 
+0

我還如何能夠在不使用臨時表來存儲中間和值來解決好奇。 – Axarydax 2013-05-14 04:51:04

+0

什麼數據庫? Oracle可以很容易地做到這一點,就像MSSQL 2012 – Matthew 2013-05-14 04:52:07

+0

http://stackoverflow.com/questions/11664142/cumulative-total-in-ms-sql-server – TechDo 2013-05-14 04:58:53

回答

5

請檢查:

;with T as(
    select 
     *, 
     ROW_NUMBER() over (partition by OrderID order by OrderID) RNum 
    from YourTable 
) 
select 
    *, 
    (select sum(UnitPrice) from T b where b.OrderID=a.OrderID and b.RNum<=a.RNum) CumTotal 
From T a 

嘗試SQL Fiddle

+0

+1就是這樣...模擬LAG功能 – Matthew 2013-05-14 05:11:34

+0

+1 ...完美解決方案 – 2013-05-14 05:17:09

+0

WOW!它的工作原理!...非常感謝@techdo。 。 。我在這裏學習......謝謝,祝你有美好的一天。 – Markmeplease 2013-05-14 23:48:18

-2

可以參考以下幾點:

SELECT t1.id, 
     t1.unitprice, 
     SUM(t2.unitprice) AS SUM 
FROM t t1 
INNER JOIN t t2 ON t1.id >= t2.id 
GROUP BY t1.id, 
     t1.unitprice 
ORDER BY t1.id 

演示:

SQLFIDDLE DEMO

+0

-1可能的重複,不正確。他希望按照**相同的** ID順序總和行,而不是連續的ID。 – Matthew 2013-05-14 04:55:09