Если все ваши URL "связаны", все заканчиваются на "?" или '/?', вы можете использовать это. Дополнительные шаблоны отсечения могут быть добавлены в операторы CASE по мере необходимости:
DECLARE @test TABLE (URL varchar(3000))
INSERT INTO @test (URL) VALUES ('http://a.com')
INSERT INTO @test (URL) VALUES ('http://b.au')
INSERT INTO @test (URL) VALUES ('http://c.edu?a=3')
INSERT INTO @test (URL) VALUES ('http://d.com/?a=3')
INSERT INTO @test (URL) VALUES ('http://d.com/?a=3&b=2')
INSERT INTO @test (URL) VALUES ('http://d.com/?a=3&b=2')
SELECT SUBSTRING(URL, 0,
CASE
WHEN PATINDEX('%/?%', URL) > 0 THEN PATINDEX('%/?%', URL)
WHEN PATINDEX('%?%', URL) > 0 THEN PATINDEX('%?%', URL)
ELSE LEN(URL) + 1
END), COUNT(*)
FROM @test
GROUP BY SUBSTRING(URL, 0,
CASE
WHEN PATINDEX('%/?%', URL) > 0 THEN PATINDEX('%/?%', URL)
WHEN PATINDEX('%?%', URL) > 0 THEN PATINDEX('%?%', URL)
ELSE LEN(URL) + 1
END)