我有兩個共享一對多關系的表。MY_FACT是父表,而MY_RMDETAILS子表是具有單個父記錄的多個記錄。
表 MY_FACT:
| FACT_ID | FACT_DATE | TOTAL_DEMAND |
|---|---|---|
| 1000 | 21/04/2022 | 500 |
| 2000 | 21/04/2022 | 500 |
表 MY_RMDETAILS:
| RM_ID | FACT_ID | 承諾數量 | 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應該是Nelse 它應該是Y。
INSUFFICIENT_RMs輸出中的列應以逗號分隔格式顯示“MY_RMDETAILS.RM_ITEM_NAME不足”記錄。
預期輸出:
| FACT_ID | FACT_DATE | TOTAL_DEMAND | 供應_足夠? | INSUFFICIENT_RMs |
|---|---|---|---|---|
| 1000 | 21/04/2022 | 500 | ? | RM2,RM4 |
| 2000 | 21/04/2022 | 500 | 是 |
請幫忙。提前致謝。
uj5u.com熱心網友回復:
您可以嘗試將子查詢與條件聚合函式一起使用。
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/460332.html
