데이터베이스 개발자 질문과 답변 게시판
안녕하세요 ^^
검색해보고 공부할려 했는데 도저히 못찾겠어서 질문 드립니다..
테이블이..
---------------------------
num txt
---------------------------
1 L1
2 L1
3 L1
4 L1
5 L1
6 L2
7 L2
8 L2
9 L2
10 L2
11 L2
이런식으로 있는데요...
txt 에서 같은 내용을 3개씩 그룹지어서 일련번호를 붙인후 txt 내용을 다시 쓰고 싶은건데요...
---------------------------
num txt
---------------------------
1 L1-1
2 L1-1
3 L1-1
--------
4 L1-2
5 L1-2
---------------------------
6 L2-1
7 L2-1
8 L2-1
-------
9 L2-2
10 L2-2
11 L2-2
이렇게요...
가능할까요... 설명하기도 어려운 문제라.. 답을 찾는건 ㅜ.ㅜ
도와주시면 감사하겠습니다..꾸벅~
Comment 3
-
건우아빠
2013.03.28 16:52
-
이스트럭(강동운)
2013.03.28 17:05
건우아빠님.. 헛!!! ^^;;
-
이스트럭(강동운)
2013.03.28 17:05
안녕하세요! SQL Server 2005 이상을 쓰시면 아래 쿼리를 활용하시길 바랍니다.
WITH TBL AS
(
SELECT 1 AS num, 'L1' as txt
UNION ALL SELECT 2, 'L1'
UNION ALL SELECT 3, 'L1'
UNION ALL SELECT 4, 'L1'
UNION ALL SELECT 5, 'L1'
UNION ALL SELECT 6, 'L2'
UNION ALL SELECT 7, 'L2'
UNION ALL SELECT 8, 'L2'
UNION ALL SELECT 9, 'L2'
UNION ALL SELECT 10, 'L2'
UNION ALL SELECT 11, 'L2'
UNION ALL SELECT 12, 'L2'
UNION ALL SELECT 13, 'L2'
UNION ALL SELECT 14, 'L3'
)
SELECT
*
, TXT + '-'+ CONVERT(VARCHAR,CEILING((ROW_NUMBER() OVER(PARTITION BY TXT ORDER BY TXT)-1)/3) + 1)
FROM TBL
CEILING(Transact-SQL): http://msdn.microsoft.com/ko-kr/library/ms189818.aspx
디비 버젼에 따라 달라 지는데요 2005 이상이시면
질문의 내용을 보면 ceiling, row_number를 이용하시는게 더 맞을듯 하네여...
with res as (
select 1 num ,'L1' txt union all
select 2 ,'L1' union all
select 3 ,'L1' union all
select 4 ,'L1' union all
select 5 ,'L1' union all
select 6 ,'L2' union all
select 7 ,'L2' union all
select 8 ,'L2' union all
select 9 ,'L2' union all
select 10 ,'L2' union all
select 11 ,'L2' )
select *
, ceiling( row_number() over(partition by txt order by txt, num ) / 3.) idx1
, txt + '-' + convert(varchar(2) , ceiling( row_number() over(partition by txt order by txt, num ) / 3.) ) TXT1
, NTILE(2) over(partition by txt order by txt ,num ) idx2
, txt + '-' + convert(varchar(2) , NTILE(2) over(partition by txt order by txt ,num ) ) TXT2
from res