Во-первых, использование LIKE
имеет свои недостатки.Взгляните на этот пост .
. Вы можете получить адрес электронной почты провайдера (хост), используя SUBSTRING
и CHARINDEX
.Поставщик
SUBSTRING(Email, CHARINDEX('@', Email, 1)+1, LEN(EmailR) - CHARINDEX('@', Email, 1))
Теперь, поскольку вы получаете часть, с которой нужно фильтровать, используйте ее для фильтрации записей, а затем используйте ROW_NUMBER()
, чтобы получить количество записей для каждого поставщика, которое будетиспользуется снова для дальнейшей фильтрации.Вы можете использовать CASE
, чтобы завершить записи.
Вот пример:
SELECT *
FROM (
SELECT *
, CASE
WHEN UPPER(EmailDomain) = 'YAHOO.COM' AND RN <= 1124
THEN 'Group 1'
WHEN UPPER(EmailDomain) = 'HOTMAIL.COM' AND RN <= 402
THEN 'Group 2'
WHEN UPPER(EmailDomain) = 'AOL.COM' AND RN <= 45
THEN 'Group 3'
WHEN UPPER(EmailDomain) = 'GMAIL.COM' AND RN <= 2353
THEN 'Group 4'
WHEN (UPPER(EmailDomain) = 'ATT.COM' OR UPPER(EmailDomain) = 'SBCGLOBAL.NET') AND RN < 164
THEN 'Group 5'
WHEN UPPER(EmailDomain) = 'COX.NET' AND RN <= 8
THEN 'Group 6'
WHEN UPPER(EmailDomain) = 'VERIZON.NET' AND RN <= 3
THEN 'Group 7'
WHEN UPPER(EmailDomain) = 'RR.COM' AND RN <= 70
THEN 'Group 8'
WHEN UPPER(EmailDomain) NOT IN('YAHOO.COM','HOTMAIL.COM','AOL.COM','GMAIL.COM','ATT.COM','SBCGLOBAL.NET','COX.NET','VERIZON.NET','RR.COM') AND RN <= 712
THEN 'Group 9'
ELSE NULL
END EmailGroup
FROM (
SELECT *, ROW_NUMBER() OVER(PARTITION BY EmailDomain ORDER BY EmailDomain) RN
FROM (
SELECT
Email
, SUBSTRING(Email, CHARINDEX('@', Email, 1)+1, LEN(EmailR) - CHARINDEX('@', Email, 1)) EmailDomain
FROM
Master_Subscribers_Score_GTE_5
) D
) C
) E
WHERE
EmailGroup IS NOT NULL
Обратите внимание, что я использовал ROW_NUMBER () вместо SELECT TOP x
.Затем я просто присвоил записям, которые ни при каких условиях не подходят, значение NULL, что дало мне простой способ показать только то, что мне нужно, и заполнить остальное значением NULL, чтобы исключить его из результатов.
Я использовал UPPER()
, потому что я не знаю параметры сортировки вашей базы данных - чувствительна ли она к регистру или нет.Поэтому я использовал это, чтобы преодолеть это.Если ваша база данных нечувствительна к регистру, она не понадобится.
Надеюсь, это поможет.