저 질문 또 있어요!! 0 6 754

by 타핑이 [SQL Query] [2012.08.30 13:37:53]


테이블에 컬럼이 여러개 있는데

regdt가 있구 하나는 type가 있고 하나는 total

이렇게 있는데

쿼리문을 실행 하면

type  total   regdt
  a   10    2012/08/29
  b    20   2012/08/29
  a    9 2012/08/30
  b   19    2012/08/30
  .
  .
  .

머 이렇게 나오거든요...

얘를 날짜별로 나타나게 할 순 없을까요??

제가 하고 싶은건 날짜를 기준으로

regdt    type a     type b
2012/08/29 10   20
2012/08/30   9    19



이렇게 하고싶은데...

전혀 감이 안오네요 .ㅠㅠ

by 부쉬맨 [2012.08.30 13:44:53]
날짜 를 group by 처리하시면됩니다.

토탈이랑 타입에 대해서는

min 처리하실지 max 처리하실지는 선택하심됨


by 오케클릭 [2012.08.30 13:49:26]
 
select regdt
,min(decode(lv, 1, decode(type, 'a', total))) as type_a 
,min(decode(lv, 2, decode(type, 'b', total))) as type_b
from t, (select level lv from dual connect by level <= 2)
group by regdt

by 타핑이 [2012.08.30 14:35:15]

저..  select level lv from dual connect by level <= 2 이부분 설며좀 해주시면 안돼요? ㅠㅠ

by 오케클릭 [2012.08.30 15:01:25]

select level lv from dual connect by level <= 2
는 가상테이블 값으로 1, 2 row 입니다. 나중에 type a와 type b에서 값을 정확하게 추출하기 위해서 씁니다.
그럼 나오는 값이 그룹하기전보다 2배로 늘어납니다. 저게 3 이면 3배로 4면 4배로 늘어나게 되죠
2로 한 이유는 type 이 2가지밖에 없기때문에... 그렇게 한것이고요
2가지 세로로된 type에 따른 total의 값을 가로로 표현하기 위해서 썼는데요
그럼 level에 따라서 decode(lv, 1, decode(type, 'a', total)) 이것은 해당값이 있는 경우에는 해당값을.. 없는경우에는 null 이기 때문에...min 이나 max 를 하게 되면 해당 조건에 맞는 값만 보여지게 됩니다.

by 마농 [2012.08.31 11:21:22]
-- (select level lv from dual connect by level <= 2) 부분은 필요없네요.
-- 해당 구문은 행을 늘릴 때 사용됩니다. 행을 줄일때는 불필요합니다.
SELECT regdt 
     , MIN(DECODE(type, 'a', total)) AS type_a
     , MIN(DECODE(type, 'b', total)) AS type_b
  FROM t
 GROUP BY regdt
 ORDER BY regdt
;

by 오케클릭 [2012.08.31 13:35:27]
 아...그렇군요..~ 역시 더 숙련하겠습니다. ㅠㅠ
타핑이님 죄송... 제가 아직 미숙하여 오히려 헤깔리게 해드렸네요..
마농님 답변 참고하시기 바랍니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입