퇴근5분전

 이번 프로젝트에서 업체와 관련된 테이블 쿼리에서 업체에 등록된 면허들에 대한 정보를 피벗해서 한번에 보여줘야 하는
쿼리를 처리하면서 잔머리 써본 쿼리 중 짧은 예로 작성해본다.


/*KEY [ tb_1 ( 1 : N ) tb_n ]#################################################################*/
SELECT *
FROM (
 values
  ('a', 'Nm:a')
 , ('b', 'Nm:b')
 , ('c', 'Nm:c')
 , ('d', 'Nm:d')
 , ('e', 'Nm:e')
) as tb_1( K, N )
 
SELECT *
FROM (
 values
  ('a', 'm1:a1')
 , ('a', 'm2:a2')
 , ('b', 'm1:b1')
 , ('e', 'm1:e1')
 , ('e', 'm2:e2')
) as tb_n( K, N )
/*순번 따기 ##################################################################################*/


SELECT
 tb_1.K
, tb_1.N
, ROW_NUMBER() OVER ( ORDER BY tb_1.K ) - RANK() OVER ( ORDER BY tb_1.K ) + 1 [SN_SEQ]
,  tb_n.N
FROM (
 values
  ('a', 'Nm:a')
 , ('b', 'Nm:b')
 , ('c', 'Nm:c')
 , ('d', 'Nm:d')
 , ('e', 'Nm:e')
) as tb_1( K, N )
LEFT OUTER JOIN
(
 values
  ('a', 'm1:a1')
 , ('a', 'm2:a2')
 , ('b', 'm1:b1')
 , ('e', 'm1:e1')
 , ('e', 'm2:e2')
) as tb_n( K, N )
ON tb_1.K = tb_n.K

결과 --- 


보면 a에 대해 1, 2 순번을 따 놓은게 보인다.

이를 이용해 그룹바이를 통해 CASE로 골라내면 옆으로 늘어뜨리는게 가능하다.

다만 CASE로 처리할수 있는 부분이 코드에 따라 달라지므로 이걸 동적으로 처리할 수 있다면 좋겠지만...

우선은 제한적으로 5개, 10개 등으로 제한된 갯수를 표현하는데 무리없는 쿼리라고 보면 된다.

'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글

MS-SQL] SP_JS_시리즈...  (0) 2012.03.02
MS-SQL ] MSDN 일부 정리!  (0) 2012.03.02
[MS-SQL] 음... 잡다?  (0) 2012.01.02
MS-SQL ] default  (0) 2011.11.18
MS-SQL ] 오류 메세지 정리  (0) 2011.11.17