#title 그룹의 첫 번째 값만 나타나게 하기
[[TableOfContents]]

==== 개요 ====
다음의 테이블에서 결과와 같이 그룹 중 첫 번째 값만 나타내게 하는 패턴이다. 일반적으로 보고서 작성시 쓰인다. 
{{{
Seq         GameType             GameName             ConnCount
----------- -------------------- -------------------- -----------
1           MMORPG               뮤                  588456
2           MMORPG               리니지              25476
3           FPS                  헉슬리              2352
4           MMORPG               썬                  34576
5           FPS                  스페셜포스          23452
6           MMORPG               십이지천            45234
7           CASUAL               파르페              34234
8           CASUAL               위키                12121
9           CASUAL               라그라로크          11111
 
 
--결과
GameType             GameName             ConnCount
-------------------- -------------------- -----------
CASUAL               파르페              588456
                     라그라로크          25476
                     위키                2352
FPS                  스페셜포스          34576
                     헉슬리              23452
MMORPG               십이지천            45234
                     리니지              34234
                     뮤                  12121
                     썬                  11111
}}}

==== 테스트 데이터 ====
{{{
CREATE TABLE #temp(
	Seq int
,	GameType varchar(20)
,	GameName nvarchar(20)
,	ConnCount int
)
INSERT #temp VALUES(1, 'MMORPG', N'뮤', 12121)
INSERT #temp VALUES(2, 'MMORPG', N'리니지', 34234)
INSERT #temp VALUES(3, 'FPS'   , N'헉슬리', 23452)
INSERT #temp VALUES(4, 'MMORPG', N'썬', 11111)
INSERT #temp VALUES(5, 'FPS'   , N'스페셜포스', 34576)
INSERT #temp VALUES(6, 'MMORPG', N'십이지천', 45234)
INSERT #temp VALUES(7, 'CASUAL', N'파르페', 588456)
INSERT #temp VALUES(8, 'CASUAL', N'위키', 2352)
INSERT #temp VALUES(9, 'CASUAL', N'라그라로크', 25476)
}}}

==== 2000 버전의 솔루션 ====
{{{
use pubs
go
 
set statistics io on
select
	isnull(b.type, '') type
,	a.title_id
,	a.title
from titles a 
	left outer join (
		select
			type
		,	min(title_id) title_id
		from titles
		group by type
) b
on a.title_id = b.title_id

/*
type         title_id title
------------ -------- --------------------------------------------------------------------------------
business     BU1032   The Busy Executive's Database Guide
             BU1111   Cooking with Computers: Surreptitious Balance Sheets
             BU2075   You Can Combat Computer Stress!
             BU7832   Straight Talk About Computers
mod_cook     MC2222   Silicon Valley Gastronomic Treats
             MC3021   The Gourmet Microwave
UNDECIDED    MC3026   The Psychology of Computer Cooking
popular_comp PC1035   But Is It User Friendly?
             PC8888   Secrets of Silicon Valley
             PC9999   Net Etiquette
psychology   PS1372   Computer Phobic AND Non-Phobic Individuals: Behavior Variations
             PS2091   Is Anger the Enemy?
             PS2106   Life Without Fear
             PS3333   Prolonged Data Deprivation: Four Case Studies
             PS7777   Emotional Security: A New Algorithm
trad_cook    TC3218   Onions, Leeks, and Garlic: Cooking Secrets of the Mediterranean
             TC4203   Fifty Years in Buckingham Palace Kitchens
             TC7777   Sushi, Anyone?
*/

select 
	isnull(b.GameType, '') GameType
,	a.GameName
,	a.ConnCount
from #temp a 
	left join (
		select
			GameType
		,	min(GameName) GameName
		from #temp
		group by GameType
	) b
on a.GameName = b.GameName
order by a.GameType, a.GameName

/*
GameType             GameName             ConnCount
-------------------- -------------------- -----------
CASUAL               라그라로크              25476
                     위키                    2352
                     파르페                  588456
FPS                  스페셜포스              34576
                     헉슬리                  23452
MMORPG               리니지                  34234
                     뮤                      12121
                     십이지천                45234
                     썬                      11111
*/
}}}

==== 2005 버전의 솔루션 ====
{{{
--2005 방식, 조낸 간단허다.. 
SELECT
	CASE WHEN RowNum > 1 THEN '' ELSE GameType END GameType
,	GameName
,	ConnCount
FROM (
	SELECT
		GameType
	,	GameName
	,	ConnCount
	,	ROW_NUMBER() OVER(PARTITION BY GameType ORDER BY GameType, ConnCount DESC) RowNum
	FROM #temp
) T
--옛날 홈페이지에 있는거 편집하려니까 졸라 빡시다...
}}}