Having become incredibly rusty I was given some SQL to turn into a Macro and have made the below which unlike its original SQL doesn't produce any result.
The VBA is a rehash of most of my old tricks learned ages ago and it runs, yet produces no result, yet running the original SQL, with the same CRN involved, gets over a hundred rows of results.
What am I not seeing?
Sub Balance()
Dim DB_CONNECTION           As ADODB.Connection
Dim DB_RECORDSET            As ADODB.Recordset
Dim CRN                     As Variant
Dim ANSWER                  As String
Dim SQL_STRING              As String
Application.DisplayStatusBar = False
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Application.ScreenUpdating = True
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ActiveSheet.Name = "Data"
Set DB_CONNECTION = New ADODB.Connection
Set DB_RECORDSET = New ADODB.Recordset
DB_CONNECTION.ConnectionString = "Driver={Oracle in OraClient18Home1_32bit}; Dbq=XXXXX; Uid=USER; Pwd=XXXXXXXX;QTO=F;"
DB_CONNECTION.Open
Sheets("Data").Activate
Range("A5").Select
CRN = ActiveCell.Value
SQL_STRING = ""
SQL_STRING = SQL_STRING + "SELECT * "
SQL_STRING = SQL_STRING + "FROM "
SQL_STRING = SQL_STRING + "(SELECT DISTINCT tran.bill_no AS ""IINV/BILL#"", tran.date_posted   AS ""DATE POSTED"", "
SQL_STRING = SQL_STRING + "DECODE(tran.trans_type, '60', 'BILLING_CHARGES', '50', 'ADJUSTMENT/INTEREST', '10', 'RECEIPTS', '40', 'REFUND', '80', "
SQL_STRING = SQL_STRING + " 'WRITE_OFF', 'OTHER') AS ""TRANSACTION TYPE"", "
SQL_STRING = SQL_STRING + "CASE WHEN tran.batch LIKE ( 'EF%' ) THEN 'EFT_PAYMENT' "
SQL_STRING = SQL_STRING + "WHEN tran.batch LIKE ( 'ef%' ) THEN 'EFT_PAYMENT' "
SQL_STRING = SQL_STRING + "WHEN tran.batch = 'CB%' THEN 'BPAY' "
SQL_STRING = SQL_STRING + "WHEN tran.batch LIKE ( 'CQ%' ) THEN 'CHEQUE' "
SQL_STRING = SQL_STRING + "WHEN tran.batch LIKE ( 'ECS%' ) THEN 'AUSTRALIA_POST' "
SQL_STRING = SQL_STRING + "WHEN tran.batch LIKE ( 'ecs%' ) THEN 'AUSTRALIA_POST' "
SQL_STRING = SQL_STRING + "WHEN tran.batch LIKE ( 'bp%' ) THEN 'AUSTRALIA_POST' "
SQL_STRING = SQL_STRING + "WHEN tran.batch LIKE ( 'BP%' ) THEN 'AUSTRALIA_POST' "
SQL_STRING = SQL_STRING + "END AS ""PAYMENT TYPE"", "
SQL_STRING = SQL_STRING + "SUM(tran.trans_value) AS debit, 0 AS credit "
SQL_STRING = SQL_STRING + "FROM "
SQL_STRING = SQL_STRING + "bcsttran tran "
SQL_STRING = SQL_STRING + "WHERE tran.u##cust_ref = 'CRN' "
SQL_STRING = SQL_STRING + "Group BY tran.bill_no, tran.date_posted, "
SQL_STRING = SQL_STRING + "tran.u##cust_ref,tran.trans_type,tran.batch) tbl1 "
SQL_STRING = SQL_STRING + "WHERE "
SQL_STRING = SQL_STRING + " tbl1.debit > 0 Union ALL "
SQL_STRING = SQL_STRING + "SELECT tbl2.bill_no,tbl2.date_billed,tbl2.bill_type, "
SQL_STRING = SQL_STRING + "CASE WHEN tbl2.batch LIKE ( 'EF%' ) THEN 'EFT_PAYMENT' "
SQL_STRING = SQL_STRING + "WHEN tbl2.batch LIKE ( 'ef%' ) THEN 'EFT_PAYMENT' "
SQL_STRING = SQL_STRING + "WHEN tbl2.batch LIKE ( 'CQ%' ) THEN 'CHEQUE' "
SQL_STRING = SQL_STRING + "WHEN tbl2.batch LIKE ( 'ef%' ) THEN 'EFT_PAYMENT' "
SQL_STRING = SQL_STRING + "WHEN tbl2.batch LIKE ( 'CB%' ) THEN 'BPAY' "
SQL_STRING = SQL_STRING + "WHEN tbl2.batch LIKE ( 'ECS%' ) THEN 'AUSTRALIA_POST' "
SQL_STRING = SQL_STRING + "WHEN tbl2.batch LIKE ( 'ecs%' ) THEN 'AUSTRALIA_POST' "
SQL_STRING = SQL_STRING + "WHEN tbl2.batch LIKE ( 'bp%' ) THEN 'AUSTRALIA_POST' "
SQL_STRING = SQL_STRING + "WHEN tbl2.batch LIKE ( 'BP%' ) THEN 'AUSTRALIA_POST' "
SQL_STRING = SQL_STRING + "END AS ""Payment Type"", "
SQL_STRING = SQL_STRING + "tbl2.debit, abs(tbl2.credit) AS credit "
SQL_STRING = SQL_STRING + "FROM "
SQL_STRING = SQL_STRING + "( SELECT DISTINCT tran.u##cust_ref,tran.bill_no, "
SQL_STRING = SQL_STRING + "DECODE(tran.trans_type, '60', 'BILLING_CHARGES', "
SQL_STRING = SQL_STRING + "'50', 'ADJUSTMENT/INTEREST', '10', 'RECEIPTS', '40', 'REFUND', '80', "
SQL_STRING = SQL_STRING + "'WRITE_OFF', 'OTHER') AS bill_type, "
SQL_STRING = SQL_STRING + "tran.date_posted AS date_billed, "
SQL_STRING = SQL_STRING + "0 AS debit, "
SQL_STRING = SQL_STRING + "SUM(tran.trans_value) AS credit, tran.batch "
SQL_STRING = SQL_STRING + "FROM "
SQL_STRING = SQL_STRING + "bcsttran tran "
SQL_STRING = SQL_STRING + "WHERE "
SQL_STRING = SQL_STRING + "tran.u##cust_ref = 'CRN' "
SQL_STRING = SQL_STRING + "Group BY tran.u##cust_ref, tran.bill_no, "
SQL_STRING = SQL_STRING + "tran.date_posted,tran.batch, "
SQL_STRING = SQL_STRING + "tran.trans_type,tran.u##trans_code) tbl2 "
SQL_STRING = SQL_STRING + "WHERE "
SQL_STRING = SQL_STRING + "tbl2.credit < 0 "
SQL_STRING = SQL_STRING + "Order BY 2 DESC, 3 DESC "
DB_RECORDSET.Open SQL_STRING, DB_CONNECTION
Sheets("Balances").Select
Sheets("Balances").Range("A1").CopyFromRecordset DB_RECORDSET
        DB_RECORDSET.Close
       
End Sub
Original Query is
SELECT
    *
FROM
    (
        SELECT DISTINCT
            tran.bill_no       AS "IINV/BILL#",
            tran.date_posted   AS "DATE POSTED",
            DECODE(tran.trans_type, '60', 'BILLING_CHARGES', '50', 'ADJUSTMENT/INTEREST', '10', 'RECEIPTS', '40', 'REFUND', '80',
            'WRITE_OFF', 'OTHER') AS "TRANSACTION TYPE",
            CASE
                WHEN tran.batch LIKE ( 'EF%' ) THEN
                    'EFT_PAYMENT'
                WHEN tran.batch LIKE ( 'ef%' ) THEN
                    'EFT_PAYMENT'
                WHEN tran.batch = 'CB%' THEN
                    'BPAY'
                WHEN tran.batch LIKE ( 'CQ%' ) THEN
                    'CHEQUE'
                                        WHEN tran.batch LIKE ( 'ECS%' ) THEN
            'AUSTRALIA_POST'
                                WHEN tran.batch LIKE ( 'ecs%' ) THEN
            'AUSTRALIA_POST'
            WHEN tran.batch LIKE ( 'bp%' ) THEN
            'AUSTRALIA_POST'
                                WHEN tran.batch LIKE ( 'BP%' ) THEN
            'AUSTRALIA_POST'
            END AS "PAYMENT TYPE",
            SUM(tran.trans_value) AS debit,
            0 AS credit
        FROM
            bcsttran tran
        WHERE
            tran.u##cust_ref = '10423949'
        GROUP BY
            tran.bill_no,
            tran.date_posted,
            tran.u##cust_ref,
            tran.trans_type,
            tran.batch
    ) tbl1
WHERE
    tbl1.debit > 0
UNION ALL
SELECT
    tbl2.bill_no,
    tbl2.date_billed,
    tbl2.bill_type,
    CASE
        WHEN tbl2.batch LIKE ( 'EF%' ) THEN
            'EFT_PAYMENT'
        WHEN tbl2.batch LIKE ( 'ef%' ) THEN
            'EFT_PAYMENT'
        WHEN tbl2.batch LIKE ( 'CQ%' ) THEN
            'CHEQUE'
        WHEN tbl2.batch LIKE ( 'ef%' ) THEN
            'EFT_PAYMENT'
        WHEN tbl2.batch LIKE ( 'CB%' ) THEN
            'BPAY'
                    WHEN tbl2.batch LIKE ( 'ECS%' ) THEN
            'AUSTRALIA_POST'
                                WHEN tbl2.batch LIKE ( 'ecs%' ) THEN
            'AUSTRALIA_POST'
                        WHEN tbl2.batch LIKE ( 'bp%' ) THEN
            'AUSTRALIA_POST'
                                WHEN tbl2.batch LIKE ( 'BP%' ) THEN
            'AUSTRALIA_POST'
 
    END AS "Payment Type",
    tbl2.debit,
    abs(tbl2.credit) AS credit
FROM
    (
        SELECT DISTINCT
            tran.u##cust_ref,
            tran.bill_no,
            DECODE(tran.trans_type, '60', 'BILLING_CHARGES', '50', 'ADJUSTMENT/INTEREST', '10', 'RECEIPTS', '40', 'REFUND', '80',
            'WRITE_OFF', 'OTHER') AS bill_type,
            tran.date_posted AS date_billed,
            0 AS debit,
            SUM(tran.trans_value) AS credit,
            tran.batch
        FROM
            bcsttran tran
        WHERE
            tran.u##cust_ref = '10423949'
        GROUP BY
            tran.u##cust_ref,
            tran.bill_no,
            tran.date_posted,
            tran.batch,
            tran.trans_type,
            tran.u##trans_code
    ) tbl2
WHERE
    tbl2.credit < 0
ORDER BY
    2 DESC,
    3 DESC
The formatting of the Query is basically consistent with another Query I have converted into a Macro but given it uses the Case Statements I am not sure if there is an issue with how VBA handles it
 
    