case문을 이용한 중복카운트는 안되겠죠? 0 5 1,085

by 빳데리빵빵 [SQL Query] [2017.12.11 19:30:13]


안녕하세요 항상 많은 도움을 받는 빵빵이 입니다 

이번에 중복 row를 적용하려하니 union all or 두번 select하는 방법 말고 다른 방법이 없나 찾아봐도 답이 없어 질문 드립니다

예를 들어 a 테이블에

이름   구분      나이    성별

홍길동 개인       19    남자   

고길순   개인     18   여자   

오길동 사업자    22     남자

이렇게 있을때 순수하게 row data를 이용하여 row 데이터를 중복으로 뽑고 싶습니다

구분       이름     나이   성별

10대    홍길동    19      남자

10대    고길순    18      여자

20대   오길동    22       남자

남자     홍길동    19      남자

여자      고길순   18     여자 

남자      오길동    22     남자

개인     홍길동   19       남자

개인      고길순   18    여자

사업자    오길동    22    남자

 

이런 결과값을 보고 싶은데 union all 말곤 없을까요??

 

by 무지버기 [2017.12.12 08:05:46]
WITH T AS (
    SELECT '홍길동' 이름 , '개인' 구분  , '19' 나이, '남자' 성별 FROM DUAL UNION ALL
    SELECT '고길순', '개인'  , '18', '여자' FROM DUAL UNION ALL
    SELECT '구루비', '법인'  , 'X' ,  'X'   FROM DUAL UNION ALL
    SELECT '오길동', '사업자', '22', '남자' FROM DUAL 
)
SELECT
DECODE(LV,1,RPAD(SUBSTR(나이,1,1),2,'0')||'대',2,성별,구분) AS "구분"
,이름, 나이, 성별
  FROM (SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= (SELECT COUNT(1) FROM T))
, T
ORDER BY LV

 


by 마농 [2017.12.12 08:35:33]
WITH t AS
(
SELECT '홍길동' 이름, '개인' 구분, 19 나이, '남자' 성별 FROM dual
UNION ALL SELECT '고길순', '개인', 18, '여자' FROM dual
UNION ALL SELECT '오길동', '사업', 22, '남자' FROM dual
)
SELECT 구분1, 구분2, 이름
  FROM (SELECT 이름, 구분, 성별
             , TRUNC(나이, -1) || '대' 연령
          FROM t
        )
 UNPIVOT (구분2 FOR 구분1 IN (구분, 연령, 성별))
 ORDER BY 구분1, 이름
;

 


by 우리집아찌 [2017.12.12 09:44:02]
WITH t AS
(
SELECT '홍길동' 이름, '개인' 구분, 19 나이, '남자' 성별 FROM dual
UNION ALL SELECT '고길순', '개인', 18, '여자' FROM dual
UNION ALL SELECT '오길동', '사업', 22, '남자' FROM dual
)

SELECT CASE WHEN LV = 1 THEN SUBSTR(나이,1,1) || '0' || '대' 
            WHEN LV = 2 THEN 성별
            WHEN LV = 3 THEN 구분
        END
       , 이름 , 나이 , 성별 
  FROM T A
     ,(SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 3 ) B
ORDER BY B.LV  

 


by 고수가되고싶어요 [2017.12.12 10:40:57]
WITH T AS (
    SELECT '홍길동' name , '개인' gubun  , '19' age, '남자' sex FROM DUAL UNION ALL
    SELECT '고길순', '개인'  , '18', '여자' FROM DUAL UNION ALL
   -- SELECT '구루비', '법인'  , 'X' ,  'X'   FROM DUAL UNION ALL
    SELECT '오길동', '사업자', '22', '남자' FROM DUAL 
)
SELECT DECODE(a.lv,1, CASE WHEN age BETWEEN '10' AND '19' THEN '10대' 
						   WHEN age BETWEEN '20' AND '29' THEN '20대' END
                           ,2,sex
                           ,3,gubun) 구분
	  ,NAME 이름
      ,age  나이
      ,sex  성별
FROM T ,(SELECT LEVEL lv FROM dual CONNECT BY LEVEL <=3 ) a

 


by 빳데리빵빵 [2017.12.12 16:24:26]

우아....모두 감사합니당 ^^

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