database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40903 게시물 읽기
No. 40903
SQL UPDATE 질문입니다.
작성자
22일
작성일
2015-08-22 10:18
조회수
8,140

개발자분들 더운 여름에 안녕하세요~

매일 눈팅하면서 지식을 얻다가, 저도 도움을 받고 싶어서 글을 올리게 되었습니다!

다름이 아니라, 가계부 만드는 과제를 하고 있는데 UPDATE쪽에서 잘 풀리지 않네요.

일자 식료품 A 공산품 B 합(A+B) 누계(어제날짜누계+오늘합계)
0801 1000 0 1000 1000
0802 0 2000 2000 3000
0803 500 1000 1500 4500
0804 0 0 0 4500
0805 1000 0 1000 5500

SELECT 일자, A, B, 합, 합+어제누계 AS 누계

    FROM(

             SELECT 일자, A, B, A+B AS 합, 누계, LAG(누계) OVER (ORDER BY 누계) AS 어제누계

             FROM 가계부

            )

이런식으로 쿼리를 짜서 보여주고있습니다.

그런데! 갑자기 0원이었던 0804날짜에 A, B값의 변동이 생기면

UPDATE 하면서 합계, 누계를 다시 보여줘야 합니다.

일자 A B 합(A+B) 누계(어제날짜누계+오늘합계)
0801 1000 0 1000 1000
0802 0 2000 2000 3000
0803 500 1000 1500 4500
0804 500 500 1000 5500
0805 1000 0 1000 6500

이런식으로 8월 전체날짜를 돌면서 누계를 다시 보여줘야합니다.

단순한 UPDATE문으로는 도저히 답이 안나오네요. FOR문 돌듯이 8월 전체 날짜 돌면서 합계, 누계값을 다시 보여주고 싶습니다.

중간값이 변하면 전체 날짜의 값이 변하게 하는 UPDATE문 없을까요?; 참고로 오라클10G 사용중입니다.

개발자분들 다들 행복한 주말 보내십시오!

이 글에 대한 댓글이 총 2건 있습니다.

추출속성이 사용된 경우입니다.
추출속성 사용은 조회 성능은 일부분 높여주지만
데이터 정합성을 맞춰주기 어렵습니다.
누계 컬럼을 제거하고 쿼리로 구현하는 것이 가능합니다.


SELECT 일자
     , A, B
     , A + B AS 합
     , SUM(A + B) OVER(ORDER BY 일자) AS 누계
     , SUM(A + B) OVER(ORDER BY 일자) - (A + B) AS 어제누계
  FROM 가계부
;


누계컬럼 제거를 결정하기 어려운 상태라서
Update 를 해야만 하는 상황이라면?
위 쿼리를 이용하여 Update 하시면 됩니다.


MERGE INTO 가계부 a
USING
(
SELECT *
  FROM (SELECT 일자
             , A, B
             , A + B AS 합
             , SUM(A + B) OVER(ORDER BY 일자) AS 누계
          FROM 가계부
        )
 WHERE 일자 >= '0804'
) b
ON (a.일자 = b.일자)
WHEN MATCHED THEN
UPDATE SET a.누계 = b.누계
;

마농(manon94)님이 2015-08-24 09:07에 작성한 댓글입니다.

merge 를 사용하면 되는군요!

마농님, 오늘도 한 수 배웁니다. 감사합니다!

22일님이 2015-08-24 23:54에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
40906ROW 정보 가로로 표현하기 [2]
지혀니
2015-08-26
8576
40905문자열과 숫자 분리하기 [1]
개발자
2015-08-24
7970
40904union 문의 [2]
이현정
2015-08-24
7615
40903SQL UPDATE 질문입니다. [2]
22일
2015-08-22
8140
40902Plan결과 고수님 의견을 듣고 싶습니다. [4]
궁금이.
2015-08-21
7859
40901쿼리 질문입니다. [1]
ㅃㅃ
2015-08-21
7735
40900select for update에 관한 질문...
...
2015-08-20
7621
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다