한개의 테이블에서 두개의 로우값 차이 계산에 대해서 질문드립니다. 0 9 11,073

by bluebyte [2009.07.13 23:21:55]


현재 하나의 테이블에 2개의 행이 있습니다. 정확히 말하면 하나의 키에 두개의 행을 가지고 있습니다.

두번째 행에서 첫번째 행의 값을 빼서 가져올수 있는지 궁금합니다.

예를들면 select Current from Table 했을때 아래와 같이 나온다고 하면

Current(칼럼명)

500000

2000000

 

이경우에 2000000 에서 500000을 뺀값을  가져오고자 합니다.

테이블의 행은 두개만 있습니다.  한수 부탁 드리겠습니다.

by 손님 [2009.07.13 23:33:58]
lead,lag 함수를 쓰시면 간단히 해결 될 듯 합니다

by 마농 [2009.07.14 08:15:40]
현재는 두개행이지만 앞으로 늘어날수도 있겠네요.
자료를 구분할 첫번째 키가 있을것이구요.
두번째로 키값 안에서 두가지 값중 어느것이 +이고, -인지를 구분할 두번째 키가 있어야 겠죠?
이에 대한 설명이 없네요...

by bluebyte [2009.07.14 10:47:57]
조회조건 출력시 키값으로 조회를 하기 때문에
가지고 있는행은 많지만, 가져오는 내용은 두줄만 가져오도록 되어 있습니다.
키값은 같은 것을 가지고 있습니다.. 어제 하루종일 고민했는데 손님이 써주신 함수를 한 번 살펴 보겠습니다.

by 마농 [2009.07.14 10:51:37]
두개행을 가져왔을때 어느값에서 어느값을 뺄지를 결정할수 있는 구분값이 있어야겠죠.
구분값이 없다면 규칙이라도 정해야겠죠. 큰거에서 작은거를 뺀다던가?

by 전창환 [2009.07.14 13:13:48]
select Current - ( sum(Current ) over(order by 정렬한 컬럼명
row 1 preceding) - Current )
from table;

자신의 로우에서 자신이 바로 전로우의 값을뺀 값을 반환합니다.
조금 어거지이기는 하지만... 힌트가 됐을려나 모르겠네요...

by 마농 [2009.07.14 13:15:21]
반드시 두개행이 존재하고 큰거에서 작은거 뺀다는 가정하에
SELECT MAX(값) - MIN(값)
FROM 테이블
WHERE 코드 = :코드

by bluebyte [2009.07.14 13:24:11]
아..질문을 하면서도 제대로된 질문을 하는것조차도 몰라서 부끄럽네요.
답변해주신 모든분들께 감사드립니다.
무조건 두번째 행에서 첫째 행의 값을 빼야 합니다.

by 마농 [2009.07.14 13:45:52]
SELECT MIN(DECODE(ROWNUM,2,값)) - MIN(DECODE(ROWNUM,1,값))
FROM 테이블
WHERE 코드 = :코드
;
위와 같이 하시면 됩니다만...
다만 조회 순서는 명확하게 정해지지 않는다는 것을 알아두시기 바랍니다.
상황에 따라 조회 순서는 달라질 수 있습니다.

by bluebyte [2009.07.14 14:39:22]
역시나 rownum 값을 받아서 처리 해야 하는군요.. *.*
내공이 부족하여 도저히 답을 찾을수가 없었는데 마농님이 큰 도움이 되었습니다.
감사합니다.
질문에 답해주신 다른분들도 감사합니다...
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입