Saya memiliki tabel dengan data seperti di bawah ini

|Transaction Seq|Sub Seq|Item No|Location Code|Quantity|Moved|

|54321          |1      |001    |AUXB1        |500     | O   | 

|54321          |2      |001    |PBXB1        |500     | I   | 

Yang pada dasarnya mengatakan 500 kotak item 001 telah dipindahkan dari lokasi AUXB1 ke PBXB1. Moved pada dasarnya mengatakan apakah item tersebut dipindahkan In atau Out. Sekarang saya harus mengekspor data seperti di bawah ini

54321|001|500|AUXB1|PBXB1 

  

Sekarang kerumitan muncul ketika item dari satu lokasi telah pindah ke 2 lokasi yang berbeda atau sebaliknya juga.

|Transaction Seq|Sub Seq|Item No|Location Code|Quantity|Moved

|54321          |1      |001    |AUXB1        |500     | O

|54321          |2      |001    |PBXB1        |300     | I

|54321          |3      |001    |BAXB1        |200     | I

Sekarang ekstrak harus mengandung, dua baris seperti di bawah ini

54321|001|300|AUXB1|PBXB1  
54321|001|200|AUXB1|BAXB1  

  

Untuk kasus di bawah ini:

|Transaction Seq|Sub Seq|Item No|Location Code|Quantity|Moved

|54321          |1      |001    |AUXB1        |500     | I

|54321          |2      |001    |PBXB1        |300     | O

|54321          |3      |001    |BAXB1        |200     | O

Ekstrak harus seperti di bawah ini

54321|001|300|PBXB1|AUXB1

54321|001|200|BAXB1|AUXB1

Tolong beri tahu saya bagaimana ini bisa dicapai.

1
Bala 12 Mei 2021, 07:00

1 menjawab

Jawaban Terbaik

Jika saya telah memahami logika Anda dengan benar, yang Anda butuhkan hanyalah gabungan dalam antara baris "masuk" dan baris "keluar" di tabel Anda:

WITH your_table AS (SELECT 54321 transaction_seq, 1 sub_seq, '001' item_no, 'AUXB1' location_code, 500 quantity, 'O' moved FROM dual UNION ALL
                    SELECT 54321 transaction_seq, 2 sub_seq, '001' item_no, 'PBXB1' location_code, 500 quantity, 'I' moved FROM dual UNION ALL
                    SELECT 54322 transaction_seq, 1 sub_seq, '001' item_no, 'AUXB1' location_code, 500 quantity, 'O' moved FROM dual UNION ALL
                    SELECT 54322 transaction_seq, 2 sub_seq, '001' item_no, 'PBXB1' location_code, 300 quantity, 'I' moved FROM dual UNION ALL
                    SELECT 54322 transaction_seq, 3 sub_seq, '001' item_no, 'BAXB1' location_code, 200 quantity, 'I' moved FROM dual UNION ALL
                    SELECT 54323 transaction_seq, 1 sub_seq, '001' item_no, 'AUXB1' location_code, 500 quantity, 'I' moved FROM dual UNION ALL
                    SELECT 54323 transaction_seq, 2 sub_seq, '001' item_no, 'PBXB1' location_code, 300 quantity, 'O' moved FROM dual UNION ALL
                    SELECT 54323 transaction_seq, 3 sub_seq, '001' item_no, 'BAXB1' location_code, 200 quantity, 'O' moved FROM dual)
SELECT out_rows.transaction_seq,
       out_rows.item_no,
       least(out_rows.quantity, in_rows.quantity) quantity,
       out_rows.location_code moved_from,
       in_rows.location_code moved_to
FROM   your_table out_rows
       INNER JOIN your_table in_rows ON out_rows.transaction_seq = in_rows.transaction_seq
                                        AND out_rows.item_no = in_rows.item_no
                                        AND out_rows.moved = 'O'
                                        AND in_rows.moved = 'I';


TRANSACTION_SEQ ITEM_NO   QUANTITY MOVED_FROM MOVED_TO
--------------- ------- ---------- ---------- --------
          54321 001            500 AUXB1      PBXB1
          54322 001            300 AUXB1      PBXB1
          54322 001            200 AUXB1      BAXB1
          54323 001            200 BAXB1      AUXB1
          54323 001            300 PBXB1      AUXB1

Saya berasumsi Anda tidak perlu melakukan pemeriksaan apa pun bahwa jumlahnya cocok, dan bahwa setiap transaksi_seq mencakup satu perpindahan (yaitu satu lokasi "keluar" ke satu atau beberapa lokasi "masuk", atau satu lokasi "masuk" ke satu atau beberapa lokasi "keluar"). Jika Anda dapat memiliki beberapa lokasi "keluar" yang memindahkan item yang sama ke beberapa lokasi "masuk" dalam satu transaksi_seq, solusi ini tidak akan berfungsi.

0
Boneist 12 Mei 2021, 07:55