Resources Up

/*
> 3 skaters each compete in an event, and 5 judges give them marks
> which rank
> each against the other:
> Skater #	j1	j2	j3	j4	j5
> 1		3	1	1	1	2
> 2		1	2	2	2	1	
> 3		2	3	3	3	3	
> In this case,
> skater one got more 1st places than skater 2 or 3, so she gets 3/1, 1/2, 1/3
> skater 2 got more 2nd's than 1st, so she gets 3/2, 2/1
> and the last got 4/3, 1/2
> so skater 1 was the best, 2 was second, and 3 was last
> So I want to return for each skater the number of marks (ordinals)
> given by each judge so that I can figure out the placements.
> 
*/
create table #skate_event
	(Skater tinyint, j1 tinyint, j2 tinyint, j3 tinyint, j4 tinyint, j5 tinyint)
insert #skate_event values( 1		,3	,1	,1	,1	,2)
insert #skate_event values( 2		,1	,2	,2	,2	,1)
insert #skate_event values( 3		,2	,3	,3	,3	,3)

SELECT skater, sum(case when rank = 1 then 1 else 0 end) as rank1,
	sum(case when rank = 2 then 1 else 0 end ) as rank2,
	sum(case when rank = 3 then 1 else 0 end) as rank3
FROM (
SELECT skater, j1 FROM #skate_event
UNION ALL
SELECT skater, j2 FROM #skate_event
UNION ALL
SELECT skater, j3 FROM #skate_event
UNION ALL
SELECT skater, j4 FROM #skate_event
UNION ALL
SELECT skater, j5 FROM #skate_event
) AS t(skater, rank)
GROUP BY skater
ORDER BY 1, 2 desc, 3 desc, 4 desc


SELECT Skater,
	cast(rank1 as varchar) + '/1, ' + cast(rank2 as varchar) + '/2, ' +
	cast(rank3 as varchar) + '/3' AS final_ranking
FROM (
SELECT TOP 100 PERCENT
	skater, sum(case when rank = 1 then 1 else 0 end),
	sum(case when rank = 2 then 1 else 0 end ),
	sum(case when rank = 3 then 1 else 0 end)
FROM (
SELECT skater, j1 FROM #skate_event
UNION ALL
SELECT skater, j2 FROM #skate_event
UNION ALL
SELECT skater, j3 FROM #skate_event
UNION ALL
SELECT skater, j4 FROM #skate_event
UNION ALL
SELECT skater, j5 FROM #skate_event
) AS t(skater, rank)
GROUP BY skater
ORDER BY 1, 2 desc, 3 desc, 4 desc
) AS event(skater, rank1, rank2, rank3)

This page was last updated on May 01, 2006 04:28 PM.