I have something I wrote in SQL that I want peoples opinions on as far as better practices or "could be problem" pieces.
Everywhere I go, I am generally the "expert" at SQL so I have no one to learn from. Thanks!
If you were training me, what would you have me fix...
Code:--//datestamp variable DECLARE @ASOF DATETIME; SET @ASOF = '5/31/09'; /* 1. BUILD INVOICE INDEX */ DROP TABLE CREDITAGING_INDEX SELECT CONVERT(VARCHAR(1),NULL) AS EXCLUDE, CONVERT(VARCHAR(255),NULL) AS EXCLUDE_REASON, DBO_INVOICE.GROUP_ZZ, DBO_INVOICE.PATIENT, DBO_INVOICE.INVOICE, DBO_INVOICE.INV_NUM, DBO_INVOICE.INV_BAL, @ASOF AS AS_OF INTO CREDITAGING_INDEX FROM IDX.DBO.INVOICE DBO_INVOICE WHERE (DBO_INVOICE.GROUP_ZZ=4 OR DBO_INVOICE.GROUP_ZZ=16 OR DBO_INVOICE.GROUP_ZZ=18 OR DBO_INVOICE.GROUP_ZZ=21 OR DBO_INVOICE.GROUP_ZZ=24) AND DBO_INVOICE.INV_BAL <0 --AND DBO_INVOICE.FSC<>999 /* 2. EXCLUDE CHARGE CORRECTIONS NO LONGER UNDER FSC 999 */ UPDATE CREDITAGING_INDEX SET CREDITAGING_INDEX.EXCLUDE='X', CREDITAGING_INDEX.EXCLUDE_REASON='CHARGE CORRECTION' FROM CREDITAGING_INDEX INNER JOIN IDX.DBO.TRANSAC DBO_TRANSAC ON CREDITAGING_INDEX.GROUP_ZZ=DBO_TRANSAC.GROUP_ZZ AND CREDITAGING_INDEX.PATIENT=DBO_TRANSAC.PATIENT AND CREDITAGING_INDEX.INVOICE=DBO_TRANSAC.INVOICE WHERE (DBO_TRANSAC.GROUP_ZZ=4 OR DBO_TRANSAC.GROUP_ZZ=16 OR DBO_TRANSAC.GROUP_ZZ=18 OR DBO_TRANSAC.GROUP_ZZ=21 OR DBO_TRANSAC.GROUP_ZZ=24) AND DBO_TRANSAC.PAY_CODE_NUM = 97 /* 3. PULL TRANSACTIONS FOR INVOICES */ DROP TABLE CREDITAGING_TRANSACTIONS SELECT DBO_TRANSAC.GROUP_ZZ, DBO_TRANSAC.PATIENT, DBO_TRANSAC.INVOICE, CI.INV_NUM, DBO_TRANSAC.TRANSACTION_ZZ, DBO_TRANSAC.PAY_CODE, DBO_TRANSAC.PAY_CODE_NUM, CASE WHEN (DBO_TRANSAC.PAY_CODE_NUM = 99) --//FOR CHARGE TRANSACTIONS ONLY REPORT THE CHARGE $$ THEN DBO_TRANSAC.CHARGE_AMOUNT ELSE --//ALL NON-CHARGE LINES (DBO_TRANSAC.DEBIT_AMT-DBO_TRANSAC.PAY_AMT-DBO_TRANSAC.ADJ_AMT-DBO_TRANSAC.CR_AMT) END AS AMT, DBO_TRANSAC.CHARGE_AMOUNT, DBO_TRANSAC.DEBIT_AMT, DBO_TRANSAC.PAY_AMT, DBO_TRANSAC.ADJ_AMT, DBO_TRANSAC.CR_AMT, DBO_TRANSAC.PX_CODE, DBO_TRANSAC.POST_DT_1, DBO_TRANSAC.POST_PD, CONVERT(MONEY,0) AS RUNNING_TOTAL, CONVERT(VARCHAR(1),NULL) AS FLAG_RUNNING_TOTAL, CONVERT(VARCHAR(1),NULL) AS FLAG_BECAMECREDIT, CONVERT(BIGINT,0) AS NEW_ORDER INTO CREDITAGING_TRANSACTIONS FROM IDX.DBO.TRANSAC DBO_TRANSAC INNER JOIN CREDITAGING_INDEX CI ON DBO_TRANSAC.GROUP_ZZ=CI.GROUP_ZZ AND DBO_TRANSAC.PATIENT=CI.PATIENT AND DBO_TRANSAC.INVOICE=CI.INVOICE WHERE (DBO_TRANSAC.GROUP_ZZ=4 OR DBO_TRANSAC.GROUP_ZZ=16 OR DBO_TRANSAC.GROUP_ZZ=18 OR DBO_TRANSAC.GROUP_ZZ=21 OR DBO_TRANSAC.GROUP_ZZ=24) AND PAY_CODE_NUM <>70 --EXCLUDE FSC TRANSFERS ORDER BY --THIS IS CRUCIAL FOR THE NEXT PIECE TO WORK DBO_TRANSAC.GROUP_ZZ, DBO_TRANSAC.PATIENT, DBO_TRANSAC.INVOICE, CASE --I WANT THE CHARGES TO BE FIRST IN THE LIST DESPITE WHEN THEY WERE POSTED WHEN (DBO_TRANSAC.PAY_CODE_NUM=99) THEN 1 ELSE DBO_TRANSAC.POST_DT_1 END, DBO_TRANSAC.TRANSACTION_ZZ /* 4. ADD IDENTITY FIELD */ ALTER TABLE CREDITAGING_TRANSACTIONS ADD ID BIGINT IDENTITY(1,1)




Reply With Quote