Well I can't think of a real simple way but I found a wayDeclare @data table(idn int, diag int, recCount int)Declare @pData table(rank int,idn int, diag int, recCount int)Declare @idn int, @diag int, @recCount int, @maxID int, @rank intinsert into @dataSelect 1, 42, 75 unionSelect 1, 49, 50 unionSelect 1, 38, 22 unionSelect 2, 70, 48 unionSelect 2, 33, 27Declare myValues cursor forSelect idn,diag, recCountFrom @dataOrder by idn, recCount descOpen myValuesFetch next from myValues into @idn , @diag , @recCountSet @maxID = @idnset @rank = 0While @@fetch_status = 0Begin set @rank = @rank +1 Insert into @pData Values(@rank, @idn , @diag , @recCount) Fetch next from myValues into @idn , @diag , @recCount if @maxID < @idn Begin Set @maxID = @idn set @rank = 0 Endendclose myValuesdeallocate myValuesSelect * From @pData
Resultsrank idn diag recCount ----------- ----------- ----------- ----------- 1 1 42 752 1 49 503 1 38 221 2 70 482 2 33 27
*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*A candle loses nothing by lighting another candle