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
운영게시판
최근게시물
MS-SQL Q&A 3725 게시물 읽기
No. 3725
이럴땐 커서를 이용해야 되는건가요??
작성자
ㅜ_ㅡ
작성일
2007-09-02 22:28
조회수
3,153

많은 데이터에 대한 업데이트 방법에 대해서 알려고 합니다. 이럴때는 커서를 이용해야되는건지 아니면 다른방법이

있는지좀 알려주시면 감사하겠습니다.

---------------------

id pid money

---------------------

1 0 0

2 1 3000

3 1 0

4 3 3000

5 3 5000

---------------------

 

데이터가 위 처럼 존재할 경우 역순으로 불러들여 id가 5부턴 업데이트를 할려고 합니다.

pid는 부모값이고요. id 5번을 보면 5000원이며 부모값은 id 3입니다.

그러므로 id 5번 업데이트시 id 3번의 money에 5000원을 더하고

다음 id 4번에서는 3000원을 더합니다. 그러면 id3번은 money가 8000원이 되고

id 3번에서는 id 1번에 8000원을 넘깁니다.. id 2번에서도 3000원을 넘기고

그러면 id 1번의 총 금액은 11000원이 되면 끝이죠.. 아 그리고 id 1번의 pid는 0인데

id 0은 없으므로 그냥 패스하는 방식이면 되고요..

 

커서에 대한 개념이 아직 없어 힘드네요...잘 아시는 분들의 많은 도움 부탁드립니다.

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

CREATE TABLE TESTA
(ID INT
, PID INT
, MONEY INT)

INSERT INTO TESTA
SELECT ID = 1 , PID = 0 , MONEY = 0 UNION ALL
  SELECT 2,  1 , 3000 UNION ALL
  SELECT 3, 1, 0 UNION ALL
  SELECT 4 , 3, 3000 UNION ALL
  SELECT 5, 3, 5000

SELECT
 A.ID
 , A.PID
 , A.MONEY
 , B.SUM_CNT
 , SS = CASE WHEN A.PID = 0 THEN B.SUM_CNT
    ELSE
     CASE WHEN EXISTS (SELECT 1 FROM TESTA WHERE PID = A.PID  AND ID > A.ID) THEN B.SUM_CNT
       ELSE 0
     END
   END
 
FROM
 TESTA A
LEFT OUTER JOIN
 (
  SELECT
   PID = ISNULL(PID, 0)
   , SUM_CNT = SUM(MONEY)
  FROM
   TESTA
  GROUP BY
   PID
   WITH ROLLUP
   HAVING SUM(MONEY) > 0
 ) B
ON A.PID = B.PID

 

.님이 2007-09-03 12:38에 작성한 댓글입니다. Edit

답변 감사드립니다..커서를 이용안하고도 가능하군요..-ㅅ-;;

왜 저런생각은 못했는지 원...ㅠ,ㅜ;

ㅜ_ㅡ님이 2007-09-03 12:55에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
3728"SQL Server에서 지금 LOCK 리소스를 가져올 수 없습니다 ..."라는 오류가 무엇인가요??? [1]
sql 관리자
2007-09-03
3363
3727쿼리좀 도와주세요. 제수준에 너무 어려워요..고수님들~~~ [1]
박통통
2007-09-03
2388
3726두 테이블중 하나라도 회원아이디가 있으면 회원가입을 못하게 하려고 합니다 [3]
sql초보
2007-09-03
2606
3725이럴땐 커서를 이용해야 되는건가요?? [2]
ㅜ_ㅡ
2007-09-02
3153
3724linked server를 이용한 오라클 데이터 수정시 오류요.. [1]
pjin
2007-09-01
8229
3722정수값을 일정한 자리수에 맞게 할려면 어케해야하나요?? [2]
불님
2007-08-31
2591
3721GROUP BY 후 JOIN [1]
CABIN
2007-08-31
2668
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다