问题描述
提前道歉,绝对是 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