오라클 가로로 되어있는 내용을 세로로 뽑아내기 질문드립니다. 0 6 1,980

by 지에나르 [SQL Query] [2017.06.26 16:42:14]


안녕하세요.

다음과같은 테이블형식을 맨아래 테이블처럼 쿼리로 뽑아내고 싶습니다.

고수분들 답변 부탁드립니다!

남자 10대

 남자20대  남자30대  남자40대  남자50대  남자60대  남자70대  여자10대  여자20대  여자30대  여자40대  여자50대  여자60대  여자70대
 100 131 150  350  210   220  100  200  150  300  350  170  150 80 

 

 나이대 남자  여자 
 10대  100 200 
 20대  131  150
 30대  150  300
 40대  350  350
 50대  210  170
 60대  220  150
 70대  100  80


 

 

 

 

by 知音 [2017.06.26 17:30:22]
     select '10대' age, m10 male, f10 female from tbl union all 
     select '20대' age, m20 male, f20 female from tbl union all
     select '30대' age, m30 male, f30 female from tbl union all
     select '40대' age, m40 male, f40 female from tbl union all
     select '50대' age, m50 male, f50 female from tbl union all
     select '60대' age, m60 male, f60 female from tbl union all
     select '70대' age, m70 male, f70 female from tbl 

 


by 지에나르 [2017.06.26 17:36:51]

답변 감사드립니다.

UNION ALL 말고 다른 방법은 없을까요?

위의 데이터 형식이 테이블에 저장되어 있는 형식이 아니라 조건이 들어가서 SUM하여 나오는 결과인데 다 UNION 하기엔 시간이 너무 오래걸려서요...ㅠㅠ


by 知音 [2017.06.26 18:04:08]
나온 결과를 WITH 로 묶어서 사용하시면 될 듯 한데요

WITH TBL AS (
           중간결과 Query
)
SELECT  ..... UNION ALL
SELECT  ....  UNION ALL
SELECT  ....  FROM TBL

 


by jkson [2017.06.27 08:02:55]
with t as
(
select 100 m10, 131 m20, 150 m30, 350 m40, 210 m50, 220 m60, 100 m70
     , 200 f10, 150 f20, 300 f30, 350 f40, 170 f50, 150 f60, 80 f70
 from dual
) 
select substr(age,2,2)||'대' age, mval, fval 
  from t
unpivot ((mval, fval) for age in ((m10, f10),(m20,f20),(m30,f30),(m40,f40),(m50,f50),(m60,f60),(m70,f70))) 

 


by 우리집아찌 [2017.06.27 08:07:28]

아 이미 늦었네 ㅡㅡ


by 마농 [2017.06.27 16:32:28]

(가공결과 > 최종결과) 로 만드는 방법 질문하셨는데요?
(가공결과 > 최종결과) 로 만드는 방법이 (원본집합 > 최종결과) 로 만드는 방법보다 오히려 더 어려울 수 있습니다.
(원본집합 > 최종결과) 로 뽑는게 훨씬 더 쉬울 듯 하네요.

SELECT 나이대
     , COUNT(DECODE(성별, '남', 1)) 남자
     , COUNT(DECODE(성별, '여', 1)) 여자
  FROM 원본집합
 GROUP BY 나이대
;

 

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