I like to think of this as a creative alternative to CTE or anything using row numbers, but I have no idea on performance:
SELECT
Dest.Code
,max(City.CityName + ' ### ' + Country.Id)
FROM base.Dest
Left join base.City
On base.Dest.CityId = base.City.Id
Left join base.Country
On base.City.CountryId = base.Country.Id
group by dest.code
This has the problem of presenting CityName and Country.Id as a single output column. This may be acceptable -- or you can use patindex, left, and substring to split it back out:
SELECT
Dest.Code
,left(max(City.CityName + ' ### ' + Country.Id),patindex('% ### %',max(City.CityName + ' ### ' + Country.Id))) CityName
,substring(max(City.CityName + ' ### ' + Country.Id),patindex('% ### %',max(City.CityName + ' ### ' + Country.Id)) + 5,len(max(City.CityName + ' ### ' + Country.Id))) Id
FROM base.Dest
Left join base.City
On base.Dest.CityId = base.City.Id
Left join base.Country
On base.City.CountryId = base.Country.Id
group by dest.code
It can get a little messy/difficult to understand. Additionally, the (arbitrary) string added between CityName and Country.Id MUST BE KNOWN TO NOT EXIST IN CITYNAME.
Finally, the code I present does not properly account for any null values. I would replace every instance of City.CityName and Country.Id with isnull(City.CityName,'') and isnull(Country.Id,'').