【问题标题】:How do I access a LISTAGG that is used in sub query?如何访问子查询中使用的 LISTAGG?
【发布时间】:2022-01-19 02:10:21
【问题描述】:

我有以下查询,我正在尝试选择 inner_query.ship_codes

如果我这样做 inner_query.item_id_alias 它工作正常,但我如何从我的 inner_query 中选择 ship_codes

SELECT inner_query.item_id_alias
FROM (
  SELECT li.item_id as item_id_alias,
         LISTAGG(a.ship_code, '; ')
           WITHIN GROUP (ORDER BY a.ship_code) as "ship_codes"
  FROM (
         SELECT DISTINCT
                ship_code, 
                MAX(order_id) as order_id
         FROM   orders o
         WHERE  o.order_id in (
                  SELECT li2.order_id
                  FROM   line_items li2 
                  GROUP BY li2.order_id
                ) 
         GROUP BY ship_code
       )a
       INNER JOIN line_items li ON a.order_id = li.order_id      
  GROUP BY li.item_id
) inner_query;

【问题讨论】:

    标签: oracle subquery listagg


    【解决方案1】:

    使用列别名。由于您在子查询中使用了带引号的标识符,因此您需要在外部查询中使用带引号的标识符(以及您可能想要引用它的任何其他地方):

    SELECT inner_query.item_id_alias,
           inner_query."ship_codes"
    FROM (
      SELECT li.item_id as item_id_alias,
             LISTAGG(a.ship_code, '; ')
               WITHIN GROUP (ORDER BY a.ship_code) as "ship_codes"
      FROM (
             SELECT DISTINCT
                    ship_code, 
                    MAX(order_id) as order_id
             FROM   orders o
             WHERE  o.order_id in (
                      SELECT li2.order_id
                      FROM   line_items li2 
                      GROUP BY li2.order_id
                    ) 
             GROUP BY ship_code
           )a
           INNER JOIN line_items li ON a.order_id = li.order_id      
      GROUP BY li.item_id
    ) inner_query;
    

    或者,您可以使用通配符:

    SELECT *
    FROM   (...) inner_query
    

    或带有子查询别名的通配符:

    SELECT inner_query.*
    FROM   (...) inner_query
    

    或没有子查询别名的标识符:

    SELECT item_id_alias,
           "ship_codes"
    FROM   (...) inner_query
    

    (注意:在同一个SELECT语句中使用DISTINCTGROUP BY是没有意义的。你可以去掉DISTINCT,输出不会改变。)

    【讨论】:

    • 非常感谢!不敢相信我没有看到。还要感谢您提供有关删除 DISTINCT 的额外提示!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 2019-05-09
    • 1970-01-01
    相关资源
    最近更新 更多