Try this(not tested):-SELECT r.Caption AS [Column Name Location]FROM(SELECT tmp1.Name as Caption,tmp1.NSerial as Order1,0 as Order2 FROM(SELECT Location, Name, (SELECT COUNT(*) + 1 from Table where Name <t.Name) AS NSerial,(SELECT COUNT(*) + 1 from Table WHERE Name=t.Name AND Location<t.Location) AS LSerialFROM Table t)tmp1UNION SELECT tmp2.Location as Caption,tmp2.NSerial as Order1,tmp2.LSerial as Order2 FROM(SELECT Location, Name, (SELECT COUNT(*) + 1 from Table where Name <t.Name) AS NSerial,(SELECT COUNT(*) + 1 from Table WHERE Name=t.Name AND Location<t.Location) AS LSerialFROM Table t)tmp2)rORDER BY r.Order1,r.Order2