Hi Jeff You're in luck - I'm using this example in a SQL class I'm preparing so I have some time to devote to the problem There are 2 problems: 1) We have been using a JOIN when we should not have JOINed or JOINed in another way. That resulted in duplicates which we then suppressed in a random way because of problem #2 2) There is a hole in the business logic of the query. #2 first because #1 cannot be solved without knowing what we actually need. You have a Members table, probably with unique MemberID's/1 row per member in a 1 to 0, 1 or many relationwhip with a Services table joined on MemberID. I presume that most Members have ranked 1 or more Services and some have not ranked any (because you used a left join) So you have Members with multiple rankings, one for each Service. [b]Which service ranking do you want?[/b] problem #1 Provide the actual result set from your query - I can't tell in what order it [u][b]is[/b][/u] appearing in. There's no way it will not appear in res.ResRanked ASC, mem.MemberTypeID ASC order in the full query you set out (with the ORDER BY res.ResRanked ASC, mem.MemberTypeID ASC ) - tinyints for values 1 - 30 are just fine - varchar will be even worse (1, 10, 11 ... 2, 21, 22..) The problem with the JOIN and GROUP BY/DISTINCT is that there is no specifying which ranking you want GROUP BY should only be used with aggregate functions (MIN, MAX ) because they specifiy which values you want for each value grouped - if they can't the GROUP BY is inappropriate. The other problem with the query is that it may be the wrong way around. Members are being identified by location and Services provided, then those members are listed with a ranking from the services provided table. The following seems to be what should is required [code]SELECT res.Service, res.ResRanked, mem.MemberID, mem.FirstName, mem.MiddleName, mem.LastName, mem.CompanyName, mem.MemberTypeID, mem.MemberLevel, mem.Addr1, mem.Addr2, mem.City, mem.State, mem.Zip, mem.Work, mem.Fax, mem.Email FROM ResServicesProvided AS res INNER JOIN ASIDMembers AS mem ON (res.MemberID=mem.MemberID) WHERE mem.MemberID IN ($members_by_location3) ORDER BY res.ResRanked; [/code] If this is not what is intended (see problem #2) then there must be some criteria missing from the WHERE clause specifying which single service you want to the the ranking for. I look forward to your resonse. Brian