TOP... WITH TIES
даст вам все, что соответствует значению в предложении ORDER BY
. Поскольку ваше предложение «ORDER BY» - это просто номер строки, который разделен на GroupNumber, то каждый GroupNumber, имеющий хотя бы одну запись, будет иметь одну из этих записей с номером строки 1. Поэтому вы вернете 1 запись для каждого GroupNumber. MSDN также говорит: «Возвращенный порядок связывания записей является произвольным. ORDER BY не влияет на это правило».
Я предполагаю, что ваш 'ORDER BY' в CTE должен быть просто:
ORDER BY GroupNumber, LEN(Address1) DESC, LEN(Postcode) DESC
Если это так, то вы получите самое низкое значение GroupNumber и самое длинное значение для Address1, самое длинное значение для почтового индекса и любые дубликаты.
С другой стороны, если вы действительно хотите указать самый длинный адрес и почтовый индекс для каждые GroupNumber, то вы уже должны это получить, и я бы попросил дополнительную информацию.