使用内部 WHERE IN 子句时如何检索多行?



我有一个customers表,其中包含zip列和cust_id,其中包含每个客户的邮政编码。 我有一个zip_state参考表,其中包含zip列和state列,其中包含每个州中的每个邮政编码。

我想做的是为每个客户提供一个状态列表 - 如下所示:

states      cust_id
--------- ---------
AL,TX,FL        112
WA,VA           113
FL,CA           114

我想出了以下查询:

SELECT LISTAGG( state, ',' ) WITHIN GROUP( ORDER BY state ) states, '112' cust_id
FROM (SELECT DISTINCT state FROM zip_state WHERE zip IN (
SELECT zip FROM customers WHERE cust_id = '112'));

。它呈现:

states      cust_id
--------- ---------
AL,TX,FL        112

由于 WHERE IN 子句,我只能列出一个客户的州。 如何修改查询,以便获得所需的结果集,如上所示?

使用group by

SELECT LISTAGG(state, ',' ) WITHIN GROUP( ORDER BY state ) states, cust_id
FROM (SELECT DISTINCT cust_id, state
FROM zip_state z JOIN
customers c
on c.zip = z.zip
) zc
GROUP BY cust_id;

最新更新