Мне нравится думать об этом как о творческой альтернативе CTE или чему-либо, использующему номера строк, но я не имею представления о производительности:
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
Это проблема представления CityName и Country.Id какодин выходной столбец.Это может быть приемлемо - или вы можете использовать patindex, left и подстроку, чтобы разделить его обратно:
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
Это может стать немного грязным / трудным для понимания.Кроме того, (произвольная) строка, добавленная между CityName и Country.Id, ДОЛЖНА БЫТЬ ИЗВЕСТНОЙ, ЧТОБЫ НЕ СУЩЕСТВОВАТЬ В CITYNAME.Наконец, код, который я представляю, неправильно учитывает нулевые значения.Я бы заменил каждый экземпляр City.CityName и Country.Id на isnull (City.CityName, '') и isnull (Country.Id, '').