쿼리좀 살펴봐주실분..(출력형태변경) 0 3 1,849

by 유일 [2009.11.09 22:18:54]


디비에서 출력되는 row는 이렇습니다.

0001   S1   A   95%

0001   S1   B   40%

0001   S2   A   27%

0001   S2   B   null

0001   S3   A   80%

0001   S3   B   83%

0001   S4   A   76%

0001   S4   B   100%

0001   S5   A   90%

0001   S5   B   null

 

===================================================================

하지만 저걸 이렇게 뿌려주고싶습니다.

                           A        B

0001    S1     95%    40%

0001    S2     27%      - (null일경우..)

0001    S3     80%    83%

0001    S4     76%    100%

0001    S5     90%     -

 

쿼리 상에서 가능할까요?? 제 머리론 나오질 않네요 문제는 검색을 어떻게 해야될지 모르겠다는게..

 

 

by 마농 [2009.11.10 08:40:36]
WITH t AS
(
SELECT '0001' cd1, 'S1' cd2, 'A' gb, '95%' v FROM dual
UNION ALL SELECT '0001', 'S1', 'B', '40%' FROM dual
UNION ALL SELECT '0001', 'S2', 'A', '27%' FROM dual
UNION ALL SELECT '0001', 'S2', 'B', null FROM dual
UNION ALL SELECT '0001', 'S3', 'A', '80%' FROM dual
UNION ALL SELECT '0001', 'S3', 'B', '83%' FROM dual
UNION ALL SELECT '0001', 'S4', 'A', '76%' FROM dual
UNION ALL SELECT '0001', 'S4', 'B', '100%' FROM dual
UNION ALL SELECT '0001', 'S5', 'A', '90%' FROM dual
UNION ALL SELECT '0001', 'S5', 'B', null FROM dual
)
SELECT cd1, cd2
, NVL(MIN(DECODE(gb,'A',v)),'-') a
, NVL(MIN(DECODE(gb,'B',v)),'-') b
FROM t
GROUP BY cd1, cd2
ORDER BY cd1, cd2
;

by 유일 [2009.11.10 09:30:50]
마농님 답변감사드립니다 ^^;
한가지 더 초보적인 질문이있는데.. 그룹으로 묶어줄경우 꼭 그룹함수를 써야하는건가요? 그래서 MIN을 넣어주신건지 궁금합니다. 특별히 MIN을 쓸필요가없을거같아서 빼봤더니 group by expression 에러가나서요.

by 마농 [2009.11.10 09:36:11]
min 도 빼시고 group by 도 빼시고 결과 확인해 보시구요.
min, group by 했을때의 결과와 비교해 보시구요.
두개 결과 비교하셔서 group by의 원리를 이해해 보세요.
group by 는 그룹별로 여러개의 행을 하나로 묶는 것입니다.
하나로 묶기 위해서는 그룹함수를 사용해야 합니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입