MS-SQL ] 1:N 관계에서 n순번 따기...
이번 프로젝트에서 업체와 관련된 테이블 쿼리에서 업체에 등록된 면허들에 대한 정보를 피벗해서 한번에 보여줘야 하는
쿼리를 처리하면서 잔머리 써본 쿼리 중 짧은 예로 작성해본다.
/*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 |