Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Wrong result set when use IN clause with multiple values

AQHAug 23 2019 — edited Aug 25 2019

my sql query fetch records with accurate "CLOSING" column (as shown in below record set) when using single selection of accountid.

pastedImage_5.png

i am facing issue in this query (below) with run with IN clause multiple accountid, it gives inaccurate CLOSING value, require assistance to fix this issue;

pastedImage_22.png

|

Header 1

|
|

CREATE TABLE AML

(

ID NUMBER,

ACCOUNT_ID NUMBER,

AAID NUMBER,

DEBIT NUMBER,

CREDIT NUMBER,

TRDATE DATE

)

INSERT INTO AML (ID, ACCOUNT_ID, AAID, DEBIT, CREDIT, TRDATE) VALUES ( 18,2292,41,44000,0,'03-Aug-2019');

INSERT INTO AML (ID, ACCOUNT_ID, AAID, DEBIT, CREDIT, TRDATE) VALUES ( 19,2292,41,1299000,0,'03-Aug-2019');

INSERT INTO AML (ID, ACCOUNT_ID, AAID, DEBIT, CREDIT, TRDATE) VALUES ( 1,2440,40,0,177555,'31-Mar-2018');

INSERT INTO AML (ID, ACCOUNT_ID, AAID, DEBIT, CREDIT, TRDATE) VALUES ( 2,2440,41,69180,0,'12-Apr-2018');

INSERT INTO AML (ID, ACCOUNT_ID, AAID, DEBIT, CREDIT, TRDATE) VALUES ( 17,2440,40,69180,0,'12-Apr-2018');

INSERT INTO AML (ID, ACCOUNT_ID, AAID, DEBIT, CREDIT, TRDATE) VALUES ( 13,2441,42,0,10000,'31-Mar-2018');

INSERT INTO AML (ID, ACCOUNT_ID, AAID, DEBIT, CREDIT, TRDATE) VALUES ( 14,2441,42,69180,0,'12-Apr-2018');

INSERT INTO AML (ID, ACCOUNT_ID, AAID, DEBIT, CREDIT, TRDATE) VALUES ( 16,2441,42,0,1000,'16-Apr-2018');

|
|

|
| |
|

WITH ledger

 AS (SELECT account\_id,

            aaid,

            TrDate,

            Debit,

            Credit,

            ROW\_NUMBER () OVER (ORDER BY trdate) AS row1

       FROM aml

      WHERE account\_id IN (2292,2440) AND aaid IN (40, 41))

SELECT L1.account_id,

     L1.aaid,

     L1.TrDate,

     L1.Debit AS Debit,

     L1.Credit AS Credit,

     (CASE

         WHEN SIGN (

                 (  NVL (L1.Credit, 0)

                  + NVL (SUM (L2.Credit), 0)

                  - NVL (SUM (L2.Debit), 0)

                  - NVL ( (L1.Debit), 0))) = -1

         THEN

            ABS (

               (  NVL (L1.Credit, 0)

                + NVL (SUM (L2.Credit), 0)

                - NVL (SUM (L2.Debit), 0)

                - NVL ( (L1.Debit), 0)))

         ELSE

              -1

            \* (  NVL (L1.Credit, 0)

               + NVL (SUM (L2.Credit), 0)

               - NVL (SUM (L2.Debit), 0)

               - NVL ( (L1.Debit), 0))

      END)

        AS closing

FROM ledger L1

     LEFT JOIN ledger L2

        ON     L1.row1 > L2.row1

           AND L1.aaid IN (40, 41)

           AND L1.account\_id IN (2292,2440)

           AND L1.trDate >= TO\_DATE ('01-Apr-2018', 'dd-Mon-yyyy')

           AND L1.trDate \<=  TO\_DATE ('03-Aug-2019','dd-Mon-yyyy')

GROUP BY L1.account_id,

     L1.aaid,

     L1.TrDate,

     L1.Credit,

     L1.Debit

ORDER BY L1.ACCOUNT_ID,

     L1.aaid,

     L1.TRDATE,

     closing

|

This post has been answered by Frank Kulash on Aug 24 2019
Jump to Answer
Comments
Post Details
Added on Aug 23 2019
17 comments
756 views