쿼리로만 반복문 만드는 쿼리 질문 드립니다. 0 6 1,384

by 쭌스 [2016.03.23 16:27:56]


업무를 하는 도중에 아래와 같은 결과 값이 나오게 해야 하는데 짱구가 잘 안돌아가네요

 

부서코드 이름

01         ABC

01         CDE

02         EFG

 

결과값

-------------------------

부서코드012     <-- 부서코드01건수2를 의미

ABC                <-- 01코드의 이름

CDE                <-- 01코드의 이름

부서코드021     <-- 부서코드02건수1을 의미

EFG                <-- 02코드의 이름

 

예전에 비슷한 쿼리를 작성했던거 같은데 다시 작성하려고 하니 짱구가 안돌아가요.

 

by jkson [2016.03.23 16:41:45]
WITH T AS
(
SELECT '01' CODE, 'ABC' NAME FROM DUAL UNION ALL
SELECT '01' CODE, 'CDE' NAME FROM DUAL UNION ALL
SELECT '02' CODE, 'EFG' NAME FROM DUAL
) 
SELECT DECODE(GROUPING(NAME),1,'부서코드'||CODE||COUNT(1),NAME)
FROM T
GROUP BY ROLLUP(CODE, NAME)
HAVING GROUPING_ID(CODE,NAME) != 3
ORDER BY CODE, GROUPING(NAME) DESC, NAME

 


by 쭌스 [2016.03.23 16:55:03]

우와 이런 방법이 있었다니요...

대단합니다. 정말 감사합니다.


by 마농 [2016.03.23 16:57:52]
SELECT DECODE(GROUPING(name), 1, '부서코드'||code||COUNT(*), name) x
  FROM t
 GROUP BY code, ROLLUP(name)
 ORDER BY code, GROUPING(name) DESC, name
;

 


by jkson [2016.03.23 17:03:44]

rollup에서 code를 빼면 되는군요. 저번주에 공부했던 내용인데 벌써 까먹..ㅠ


by swlee [2016.03.23 17:03:47]
WITH T AS
(
SELECT '01' CODE, 'ABC' NAME FROM DUAL UNION ALL
SELECT '01' CODE, 'CDE' NAME FROM DUAL UNION ALL
SELECT '02' CODE, 'EFG' NAME FROM DUAL
) 
select *
from (
select code,'부서코드'||code||count(code) name
from t
group by code
union all
select code, name
from t )
order by code, replace(name,'부서코드','')

 


by 쭌스 [2016.03.23 17:26:16]

감사합니다. 정말 많은 도움이 되었고, 공부해야 할게 너무 많네요.

다시한번 감사의 말씀 드립니다.

 

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