我有一个很大的供应商列表和更大的发送者电子邮件地址列表。有时,一个供应商的发件人电子邮件地址与唯一的发件人电子邮件地址相同,称为“processor x”,另一个供应商可能有多个发件人电子邮件地址,但包括“processor x”作为发件人之一。而另一个供应商可能有许多发送者电子邮件地址,但是没有'proccessor x‘作为他们的电子邮件之一。
我想标记的供应商,只有发件人电子邮件地址的‘处理器x’的排名为1,但其他供应商与其他2个条件提及为2。
我如何才能在排名中做到这一点?这是可能的吗?
MAny感谢您的宝贵时间。

发布于 2020-04-16 23:48:14
我将通过使用选择性计数操作符来实现此目的。如下所示:
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.SendingOrganizationhttps://stackoverflow.com/questions/61252083
复制相似问题