SELECT title, type, IDENTITY(INT, 1, 1) seq INTO #temp
FROM titles

SELECT seq%cnt + 1 seq, a.type, a.title
FROM #temp a
INNER JOIN (
SELECT
MIN(type) type
, COUNT(*) cnt
FROM titles
GROUP BY type) b
ON a.type = b.type
ORDER BY a.type, seq%cnt + 1

DROP TABLE #temp

--임시테이블은 순번을 만들기 위해서 쓴 것이다..
--역시 오라클의 rownum이 없는 것이 참 아쉽다. 임시테이블을 만들지 않고서도 순번을 만들 수는 있으나
--순번을 매기는 것은 임시테이블을 사용하는 것이 부하가 더 적다. 다음의 쿼리와 I/O를 비교해 보면 알 것이다.
--2005버전은 Row_Number()함수를 이용하면 된다.

SELECT COUNT(*) seq, a.title_id, a.type
FROM titles a INNER JOIN titles b
ON a.type = b.type
AND a.title_id >= b.title_id

GROUP BY a.title_id, a.type


출처: http://databaser.net/moniwiki/wiki.php/그룹별순번만들기

+ Recent posts