쿼리 부탁드립니다. 0 6 982

by 날자~! [SQL Query] [2019.02.18 17:38:16]


with data
as ( select 1 a, 6 b, 3 c, 2 d, 5 e from dual union all
     select 2 a, 4 b, 5 c, 8 d, 9 e from dual union all
     select 3 a, 5 b, 7 c, 10 d, 13 e from dual
    )
select *
from data
 
 
 
 
아래와 같은 샘플 데이터가 있을떄, 1번 row에 대해서만
 
 
a 컬럼 밑에는 a-0
 
b 컬럼 밑에는 b-a
 
c 컬럼 밑에는 c-b
 
d 컬럼 밑에는 d-c
 
e 컬럼 밑에는 e-d
 
 
구하고 싶은데, 쿼리 부탁드립니다
 
 
 
[샘플 데이터]
 
a b c  d  e    <-- 컬럼
 
 
1 6 3  2  5    <-- row1
 
 
2 4 5  8  9    <-- row2
 
 
3 5 7  10 13   <-- row3
 
 
 
 
 
[결과]
 
 
a     b     c    d    e    <-- 컬럼
 
 
1     6     3    2    5    <-- row1
 
1     5    -3   -1    3              <-- 결과 컬럼
 
2     4     5    8    9    <-- row2
 
 
3     5     7    10   13   <-- row3
 

 

by 마농 [2019.02.18 17:53:05]

결과표를 행열을 정확하게 표현해 주세요.
원본 3줄 + 결과 3줄 = 전체 6줄 나오는건가요?
a-0, b-a 식의 표현 말고, 실제 값으로 표현해 주세요?


by 날자~! [2019.02.18 19:24:59]

설명과 다르게 결과를 적었었네요..

수정했습니다

 

row가 3개 있으면

첫번째 row로 계산해서

총 4개의 row가 있어야 됩니다( 추가된 row는 1row의 컬럼들로 계산 )


by 마농 [2019.02.19 08:28:39]

첫번째 라는 걸 판별하려면 정렬기준 같은게 있어야 합니다.
a 로 정렬한다던가? 별도의 정렬기준 컬럼이 존재한다던가?


by 날자~! [2019.02.19 08:56:03]

샘플 데이터에 표기하지 않았지만

내부적으로 order_seq 컬럼을 가지고 있습니다

 

a b c  d  e   order_seq <-- 컬럼
 
 
1 6 3  2  5        1   <-- row1
 
 
2 4 5  8  9        2    <-- row2
 
 
3 5 7  10 13      3   <-- row3


by 마농 [2019.02.19 09:10:22]
WITH data AS
(
SELECT 1 order_seq, 1 a, 6 b, 3 c, 2 d, 5 e FROM dual
UNION ALL SELECT 2, 2, 4, 5,  8,  9 FROM dual
UNION ALL SELECT 3, 3, 5, 7, 10, 13 FROM dual
)
SELECT rn
     , lv
     , a
     , DECODE(lv, 1, b, b - a) b
     , DECODE(lv, 1, c, c - b) c
     , DECODE(lv, 1, d, d - c) d
     , DECODE(lv, 1, e, e - d) e
  FROM (SELECT ROW_NUMBER() OVER(ORDER BY order_seq) rn
             , a, b, c, d, e
          FROM data
        )
     , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 2)
 WHERE lv <= DECODE(rn, 1, 2, 1)
 ORDER BY rn, lv
;

 


by 날자~! [2019.02.19 09:25:27]

감사합니다~!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입