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

时间:2018-10-23 18:26:55

标签: sql oracle11g

我有一个fc,fc0,fc1,...表,其中的列customerszip包含每个客户的每个邮政编码。 我有一个cust_id参考表,其中包含zip_statezip列,其中包含每个州的每个邮政编码。

我想做的是为每个客户提供状态列表-类似于:

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'));

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

1 个答案:

答案 0 :(得分:1)

使用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;