You could probably simplify -set nocount on create table #moo (cat varchar(1), rank int, value real)insert into #moo values ('a',3,14)insert into #moo values ('a',2,12)insert into #moo values ('a',1,11)insert into #moo values ('b',1,44)select d.cat, d.rank, f.avgr from (select a.cat, a.rank, value - avgr as diff from #moo ainner join (select cat, avg(value) as avgr from #moo group by cat) bon a.cat = b.cat) dInner join (select cat, min(diff * diff) as unsigneddiff from (select a.cat, a.rank, value - avgr as diff from #moo ainner join (select cat, avg(value) as avgr from #moo group by cat) bon a.cat = b.cat) bgroup by cat) eon d.diff * d.diff = unsigneddiffand d.cat = e.catinner join (select cat, avg(value) as avgr from #moo group by cat) fon d.cat = f.cat drop table #moo-------Moo. :)