计数SELECT DISTINCT LISTAGG

时间:2018-11-30 09:31:56

标签: sql oracle

   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

谁能告诉我为什么这行不通?

1 个答案:

答案 0 :(得分:2)

您可以在子查询中使用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值的定界字符串列表的单行。由于LISTAGG中只有一个值,因此DISTINCT子句是多余的,外部查询中的COUNT将始终返回1。