【问题标题】:How do I retrieve multiple rows when using an inner WHERE IN clause?使用内部 WHERE IN 子句时如何检索多行?
【发布时间】:2018-10-24 02:28:33
【问题描述】:

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

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

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 子句,我只能列出一位客户的状态。 如何修改查询,以便获得上述所需的结果集?

【问题讨论】:

    标签: sql oracle11g


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2013-05-20
      • 2019-06-24
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多