首页 > 解决方案 > 计数 SELECT DISTINCT LISTAGG

问题描述

我想知道如何计算子查询/值'HANDLING_UNIT_ID'下面是我目前拥有的:

COUNT (SELECT DISTINCT LISTAGG(HANDLING_UNIT_ID, ',') WITHIN GROUP(ORDER BY HANDLING_UNIT_ID) FROM SHIPMENT_LINE_HANDL_UNIT WHERE ORDER_NO = SL.ORDER_NO) AS QUANTITY

标签: sqloracleplsql

解决方案


您可以COUNT( DISTINCT ... )在子查询中使用:

SELECT your_outer_values,
       ( SELECT COUNT( DISTINCT HANDLING_UNIT_ID )
         FROM   SHIPMENT_LINE_HANDL_UNIT
         WHERE  ORDER_NO = SL.ORDER_NO ) AS quantity
FROM   your_table sl

任何人都可以建议为什么这不起作用?

没有GROUP BY子句,因此LISTAGG将处理整个结果集并将其聚合到由所有值的分隔字符串列表组成的单行中HANDLING_UNIT_ID。由于 then 子句只有一个值,LISTAGG因此该DISTINCT子句是多余的,并且COUNT来自外部查询将始终返回 1。


推荐阅读