SQL - 使用服务组合查找帐户

问题描述

提前道歉,绝对是 sql 新手,我不确定我的措辞是最好的。
我有一个表格,列出了帐户及其活动服务。例如,

帐户 Serviceid 服务名称
1111 00001 税务咨询
1111 00004 家庭保险
1112 00004 家庭保险
1111 00003 汽车保险
1111 00002 账单支付
1112 00001 税务咨询

我正在尝试查找具有以下内容的帐户:
税务咨询、账单支付和家庭保险

税务咨询、账单支付和汽车保险

所以他们需要有'00001'和'00002'和/或'00003'/'00004'
感谢您的帮助!

解决方法

您可以为此使用条件聚合。一个比较简洁的方法是:

select acct
from t
group by acct
having sum(case when serviceName = 'Tax Consulting' then 1 else 0 end) > 0 and
       sum(case when serviceName = 'Bill Pay' then 1 else 0 end) > 0 and
       sum(case when serviceName in ('Home Insurance','Auto Insurance') then 1 else 0 end) > 0;

如果你不想同时拥有保险和服务的账户不重复,那么你可以使用:

sum(case when serviceName in ('Home Insurance','Auto Insurance') then 1 else 0 end) = 1