emp table
사번 | 이름 |
001 | 홍길동 |
002 | 임꺽정 |
경력사항 table
사번 | seq | 회사이름 | 근무시작일 |
001 | 1 | 삼성전자 | 1999-01-01 |
001 | 2 | 대한전자 | 2002-01-01 |
001 | 3 | 엘지전자 | 2012-01-01 |
002 | 4 | 한화이글스 | 2010-01-01 |
002 | 5 | 두산 | 2012-01-01 |
위의 테이블들을 아래와 같은 형태로 보여주고 싶습니다.
사번 | 이름 |
| 회사이름1 | 근무시작일1 | 회사이름2 | 근무시작일2 | 회사이름3 | 근무시작일 3 | |
001 | 홍길동 | 삼성전자 | 1999-01-01 | 대한전자 | 2002-01-01 | 엘지전자 | 2012-01-01 | ||
002 | 임꺽정 | 한화이글스 | 2010-01-01 | 두산 | 2012-01-01 |
경력사항은 사원별로 3개 이상으로 많을수도 있지만, seq 순으로 최대 3개의 경력사항만 보여줍니다.
당췌 어떻게 보여줘야 할지 감이 안잡히네요..
rownum 을 사용해서 보여주려고 했는데..컬럼마다 select 에 inline를 호출할수도 없구요..
pivot 으로 하면 가능할까요?
게시판 search 해도 활용할 만한 예제가 search가 안되서요..
비슷한 예제 있으면 그거라도 알려주시면 감사~ 드리겠습니다.
Comment 1
-
건우아빠
2013.06.19 22:18
/*
SEQ는 사원별로 별도로 재부여를 먼저 해주고 하시면 될듯 합니다.
전 일단 재부여 했다는걸로 하고 해 봤습니다. ROW_NUMBER(PARTITION BY 사번 ORDER BY SEQ) 이용
중첩피벗을 이용하는 방법인데 많이 활용을 안해서 이렇게도 가능 하다는 차원입니다.
어저면 좀 복잡한 감이 있지만 알아두시는것도 나브지는 않을듯 합니다.
*/
;WITH
A AS (
SELECT '001' [사번] ,'홍길동' [이름] UNION ALL
SELECT '002' [사번] ,'임꺽정' [이름] ) ,
B AS (
SELECT '001' [사번] , 1 [seq] ,'삼성전자' [회사이름] , '1999-01-01' [근무시작일] UNION ALL
SELECT '001' , 2 ,'대한전자' , '2002-01-01' UNION ALL
SELECT '001' , 3 ,'엘지전자' , '2012-01-01' UNION ALL
SELECT '002' , 1 ,'한화이글스' , '2010-01-01' UNION ALL
SELECT '002' , 2 ,'두산' , '2012-01-01' )
SELECT [사번] ,[이름]
, MAX([회사1]) [회사1]
, MAX([경력1]) [경력1]
, MAX([회사2]) [회사2]
, MAX([경력2]) [경력2]
, MAX([회사3]) [회사3]
, MAX([경력3]) [경력3]
FROM (
SELECT '회사'+CONVERT(VARCHAR,B.seq) [사원1]
, '경력'+CONVERT(VARCHAR,B.seq) [사원2]
, A.[사번]
, A.[이름]
, B.[회사이름]
, B.[근무시작일]
FROM A JOIN B ON A.[사번] = B.[사번]
) AS P
PIVOT (
max([회사이름])
FOR [사원1] IN ( [회사1],[회사2],[회사3] )
) AS PVT1
PIVOT (
max([근무시작일])
FOR [사원2] IN ( [경력1],[경력2],[경력3] )
) AS PVT2
GROUP BY [사번] ,[이름]
ORDER BY [사번]
----------------------------------------------------------------------
-- 많이 하는 방법입니다.
----------------------------------------------------------------------
;WITH
A AS (
SELECT '001' [사번] ,'홍길동' [이름] UNION ALL
SELECT '002' [사번] ,'임꺽정' [이름] ) ,
B AS (
SELECT '001' [사번] , 1 [SEQ] ,'삼성전자' [회사이름] , '1999-01-01' [근무시작일] UNION ALL
SELECT '001' , 2 ,'대한전자' , '2002-01-01' UNION ALL
SELECT '001' , 3 ,'엘지전자' , '2012-01-01' UNION ALL
SELECT '002' , 1 ,'한화이글스' , '2010-01-01' UNION ALL
SELECT '002' , 2 ,'두산' , '2012-01-01' )
SELECT A.[사번]
, A.[이름]
, MAX(CASE WHEN B.SEQ = 1 THEN [회사이름] END ) [회사1]
, MAX(CASE WHEN B.SEQ = 1 THEN [근무시작일] END ) [경력1]
, MAX(CASE WHEN B.SEQ = 2 THEN [회사이름] END ) [회사2]
, MAX(CASE WHEN B.SEQ = 2 THEN [근무시작일] END ) [경력2]
, MAX(CASE WHEN B.SEQ = 3 THEN [회사이름] END ) [회사3]
, MAX(CASE WHEN B.SEQ = 3 THEN [근무시작일] END ) [경력3]
FROM A JOIN B ON A.[사번] = B.[사번]
GROUP BY A.[사번] , A.[이름]