2014-03-03 117 views
4

我在Oracle數據庫中有一個表,其中包含以下感興趣的字段:位置,產品,日期,金額。我想編寫一個查詢,按地點,產品和日期獲得總計金額。我在下面列出了一個我希望得到的結果的示例表。按組SQL運行總計(Oracle)

我可以得到一個運行總數,但當我到達一個新的位置/產品時,我無法重置它。這是我迄今爲止的代碼,任何幫助將不勝感激,我有一種感覺,這是一個簡單的修復。

select a.*, sum(Amount) over (order by Location, Product, Date) as Running_Amt 
from Example_Table a 

+----------+---------+-----------+------------+------------+ 
| Location | Product | Date  | Amount  |Running_Amt | 
+----------+---------+-----------+------------+------------+ 
| A  | aa  | 1/1/2013 | 100  | 100  | 
| A  | aa  | 1/5/2013 | -50  | 50   | 
| A  | aa  | 5/1/2013 | 100  | 150  | 
| A  | aa  | 8/1/2013 | 100  | 250  | 
| A  | bb  | 1/1/2013 | 500  | 500  | 
| A  | bb  | 1/5/2013 | -100  | 400  | 
| A  | bb  | 5/1/2013 | -100  | 300  | 
| A  | bb  | 8/1/2013 | 250  | 550  | 
| C  | aa  | 3/1/2013 | 550  | 550  | 
| C  | aa  | 5/5/2013 | -50  | 600  | 
| C  | dd  | 10/3/2013 | 999  | 999  | 
| C  | dd  | 12/2/2013 | 1   | 1000  | 
+----------+---------+-----------+------------+------------+ 

回答

2

啊,我想我已經想通了。

select a.*, sum(Amount) over (partition by Location, Product order by Date) as Running_Amt 
from Example_Table a 
-3

我可以輸出所有的答案,或者將您發送到我瞭解的地方。 :)

檢查了這一點,它解釋了你正在嘗試做什麼。

http://www.codeproject.com/Articles/300785/Calculating-simple-running-totals-in-SQL-Server

+0

您沒有找到解釋如何分區數據的文章有用嗎?雖然答案是分區。 –

+0

我沒有downvote這個答案,但我認爲肯定有改進的餘地。也許考慮增加更多的上下文/內容 - 似乎對SO有共識,[僅有鏈接不足以獲得好的答案](http://meta.stackexchange.com/questions/7515/why-is-linking-bad )。 – crennie

+0

另外,這個鏈接可能更適合作爲評論而不是答案......但不幸的是,你需要50個代表。如果你像我一樣,你認爲這是蹩腳的,那麼請查看[這個關於它的問題](http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation ),這給出了一些動機的限制,並且還提出了一些寫出好的答案的方法:D – crennie

1

從Oracle 10g中書高級SQL函數,它有這個例子。

SELECT dte "Date", location, receipts, 
SUM(receipts) OVER(ORDER BY dte 
ROWS BETWEEN UNBOUNDED PRECEDING 
AND CURRENT ROW) "Running total" 
FROM store 
WHERE dte < '10-Jan-2006' 
ORDER BY dte, location