我在BigQuery中有两个表,其以下各栏
t1
timestamp |customer_id |office |client_name
01.01.2020|1 |USA |Mike
01.01.2020|2 |USA |John
01.01.2020|3 |GER |Jenny`
t2
timestamp |customer_id |agent_id |agent_role
01.01.2020|1 |10 |Level1
01.01.2020|1 |20 |Level2
01.01.2020|2 |30 |Level1`
现在当我加入这两个表时
SELECT DISTINCT t1.timestamp, t2.customer_id, office, client_name,
CASE WHEN role = "Leve1" THEN agent_id ELSE NULL END
AS responsible_agent,
FROM t1
LEFT JOIN t2 ON t1.customer_id = t2.customer_id
我得到下表
t3
timestamp |customer_id |office |client_name|agent_id
01.01.2020|1 |USA |Mike | 10
01.01.2020|1 |USA |Mike |null
01.01.2020|2 |USA |Jenny | 30`
如果分配了1级,我的新表(t3)应该显示agent_id,如果没有分配1级,则显示null。正如您在t3中看到的那样,我获得了两个customer_id = 1的记录,因为customer_id = 1分配了agent_role = 1级,还分配了agent_role = 2级。
t3
timestamp |customer_id |office |client_name|agent_id
01.01.2020|1 |USA |Mike | 10
01.01.2020|1 |USA |Mike |null
我的任务是加入t1和t2 ..如果存在Level 1,则显示agent_id;如果未分配Level 1,则显示null;由于分配了Level 2,请删除显示为null的那些。
SELECT DISTINCT t1.timestamp, t1.customer_id, office, client_name,t2.agent_id
FROM t1
LEFT JOIN t2 ON t1.customer_id = t2.customer_id AND t2.agent_role = 'Level1'
如果我理解正确:
SELECT t1.timestamp, t1.customer_id, t1.office, t1.client_name,
COALESCE(MAX(CASE WHEN t2.role = 'Leve1' THEN t2.agent_id END) ,
MAX(t2.agent_id)
) AS responsible_agent,
FROM t1 LEFT JOIN
t2
ON t1.customer_id = t2.customer_id
GROUP BY t1.timestamp, t1.customer_id, t1.office, t1.client_name;