У меня есть большой список поставщиков и большой список адресов электронной почты поставщиков. - PullRequest
0 голосов
/ 16 апреля 2020

У меня большой список поставщиков и большой список адресов электронной почты отправителя. Иногда у поставщика будет тот же адрес электронной почты отправителя, который называется «процессор x», в качестве единственного отправителя электронной почты, у другого поставщика может быть много адресов электронной почты отправителя, но в качестве одного из отправителей может быть указан «процессор x». и у другого поставщика может быть много адресов электронной почты отправителя, но в качестве одного из адресов электронной почты не указывается «обработчик x».

Я хочу пометить поставщиков только с адресом электронной почты отправителя «процессор x» в качестве ранга 1, но другие поставщики с другими 2 условиями, упомянутыми как 2.

Как я могу сделать это в RANK? Возможно ли это?

Большое спасибо за ваше время.

my example

1 Ответ

1 голос
/ 16 апреля 2020

Я бы подошел к этому с помощью оператора выборочного подсчета. Как то так:

Declare @Temp 
Table   (
           Customer VarChar(100),
           SendingOrganization varchar(100),
           Sender_Email_Address varchar(100)
        );

Insert Into @Temp Values('entweiler','a1','processor x');
Insert Into @Temp Values('entweiler','a2','processor x');
Insert Into @Temp Values('entweiler','a3','processor x');
Insert Into @Temp Values('entweiler','a4','x@y.com');
Insert Into @Temp Values('entweiler','a4','processor x');
Insert Into @Temp Values('entweiler','a4','processor x');
Insert Into @Temp Values('entweiler','a4','processor x');
Insert Into @Temp Values('entweiler','a4','processor x');
Insert Into @Temp Values('entweiler','a5','a@b.com');
Insert Into @Temp Values('entweiler','a5','b@c.com');
Insert Into @Temp Values('entweiler','a5','c@d.com');
Insert Into @Temp Values('entweiler','a5','d@e.com');
Insert Into @Temp Values('entweiler','a5','e@f.comx');
Insert Into @Temp Values('entweiler','a5','processor x');
Insert Into @Temp Values('entweiler','a6','f@g.com');

With Emails As
(
    Select  SendingOrganization,
            Count(Case when sender_email_address = 'processor x' Then 1 End) As WithProcessor,
            Count(Case when sender_email_address <> 'processor x' Then 1 End) As WithoutProcessor,
            Count(*) As AllEmail
    From    @Temp
    Group By SendingOrganization
)
Select  T.*,
        Case When WithProcessor = AllEmail Then 1
             When WithoutProcessor = allEmail Then 3
             Else 2
             End As Rank
From    Emails
        Inner Join @Temp T
            On Emails.SendingOrganization = T.SendingOrganization
...