Would something like the following work ?
Obviously, I borrowed heavily from your work CK.
Code:
WITH ctePhone AS ( SELECT ROW_NUMBER() OVER(Company , PhoneType , LD ORDER BY Phone) AS SeqNo , Phone , Company , PhoneType , LD FROM @Phones ) SELECT MIN(Phone) AS First_Consecutive , CASE WHEN MIN(Phone) < MAX(Phone) THEN MAX(Phone) ELSE NULL END AS Last_Consecutive , MAX(SeqNo) - MIN(SeqNo) + 1 AS [Length] , Company , PhoneType , LD FROM ctePhone GROUP BY Company , PhoneType , LD ORDER BY MIN(Phone)
Comment