我有一张包含客户联系数据的表格,例如:
cust_id tel_no email
cust1 234238 a@a.com
cust2 423443 a@ab.com
cust3 234238 d@a.com
我有一张表格,显示哪些渠道不会用于特定客户(让我们称之为退出)
cust_id channel
cust1 tel_no
cust2 tel_no
cust2 email
cust3 email
我想在SQL中创建一个视图,它会根据optout表中的客户/渠道组合隐藏第一个表中的联系人数据,以便结果如下所示:
cust_id tel_no email
cust1 a@a.com
cust2
cust3 234238
最好的方法是什么?我在考虑类似的事情
case when cust1 in (select cust_id from optout where channel = 'tel_no')
作为每个领域的检查,但如果有500,000个客户,它可能是有用的。
感谢。
答案 0 :(得分:1)
尝试此查询:
SELECT c.cust_id,
nvl2( q.tel_no, null, c.tel_no ) tel_no,
nvl2( q.email, null, c.email ) email
FROM contact_data c
LEFT JOIN (
SELECT cust_id,
min(case channel when 'tel_no' then 1 end) tel_no,
min(case channel when 'email' then 1 end) email
FROM opt
GROUP BY cust_id
) q
ON c.cust_id = q.cust_id
ORDER BY c.cust_id