2014-03-03 7 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

나는 모든 답변을 입력하거나 내가 배운 곳으로 보낼 수 있습니다. :)

이 내용을 확인해보십시오. 수행하려는 작업을 정확하게 설명합니다.

오라클 10g 책에서 고급 SQL 기능에서

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

+0

데이터를 효과적으로 분할하는 방법에 대한 기사가 없습니다. 대답은 분할이지만. –

+0

나는이 답변을 downvote하지 않았지만 개선의 여지가 확실히 있다고 생각합니다. 더 많은 컨텍스트/콘텐츠를 추가하는 것을 고려해보십시오. [링크만으로는 좋은 대답을하기에는 충분하지 않기 때문에] 컨센서스가있는 것 같습니다 (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 -to-comment-what-can-i-do- 대신), 제한 사항에 대한 동기 부여를 제공하며 훌륭한 대답을 작성하는 몇 가지 방법을 제안합니다. D – crennie

1

, 그것은이 예제를 가지고있다.

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