甲骨文 |从具有一对多关系的表中检索记录

Oracle | Retrieval of records from tables having One to many relationship

我有两个共享一对多关系的 table。 MY_FACT 是父项 table,而 MY_RMDETAILS 是子项 table,对于一个父项记录有多个记录。

Table MY_FACT:

FACT_ID FACT_DATE TOTAL_DEMAND
1000 21/04/2022 500
2000 21/04/2022 500

Table MY_RMDETAILS:

RM_ID FACT_ID PROMISE_QTY REQUEST_QTY RM_ITEM_NAME
200 1000 500 500 RM1
201 1000 400 500 RM2
202 1000 500 500 RM3
203 1000 400 500 RM4
300 2000 500 500 RM1
301 2000 500 500 RM2
302 2000 500 500 RM3
303 2000 500 500 RM4

我需要编写一个查询以获得以下输出。

逻辑:

如果MY_RMDETAILS.PROMISE_QTY小于MY_RMDETAILS.REQUEST_QTY,供应不足。

因此,对于任何给定的 MY_FACT 记录,如果其来自 MY_RMDETAILS 的任何子记录的 PROMISE_QTY 小于 REQUEST_QTY,则标志 SUPPLY_SUFFICIENT在输出中应该是 N 否则它应该是 Y.

并且输出中的 INSUFFICIENT_RMs 列应以逗号分隔格式显示 MY_RMDETAILS.RM_ITEM_NAME 个“不足”记录。

预期输出:

FACT_ID FACT_DATE TOTAL_DEMAND SUPPLY_SUFFICIENT? INSUFFICIENT_RMs
1000 21/04/2022 500 N RM2,RM4
2000 21/04/2022 500 Y

请帮忙。提前致谢。

您可以尝试使用带条件聚合函数的子查询。

SELECT t2.*,
       CASE WHEN t1.INSUFFICIENT_cnt > 0 THEN 'N' ELSE 'Y' END,
       t1.INSUFFICIENT_RMs
FROM (
    SELECT FACT_ID,
        LISTAGG(CASE WHEN PROMISE_QTY < REQUEST_QTY THEN RM_ITEM_NAME END, ', ')  WITHIN GROUP (ORDER BY RM_ID)  INSUFFICIENT_RMs,
        COUNT(CASE WHEN PROMISE_QTY < REQUEST_QTY   THEN RM_ITEM_NAME END) INSUFFICIENT_cnt
    FROM MY_RMDETAILS
    GROUP BY FACT_ID
) t1 INNER JOIN MY_FACT t2
ON t1.FACT_ID = t2.FACT_ID