Reputation: 11
By default I need to get pr no,Ip no,patient name,age,sex,discharge date,department,pay type,status based on from date and to date and also i need to get details based on pr no and ip no CREATE OR REPLACE PROCEDURE SP_CASE_SHEET_ISUBMISSION_LIST
( IFROMDATE DATE, ITODATE DATE, IPRNO NUMBER, IPNO NUMBER, IPAYTYPE VARCHAR, IDEPTCODE VARCHAR, mCursor OUT SYS_REFCURSOR ) AS BEGIN OPEN mCursor FOR SELECT t.PRNO,t.IPATIENTID,t.FIRSTNAME,t.Age,t.SEX,T.DEPTNAME,t.DISGDATE,t.PAYTYPE,nvl( ca.status,'Not Submited') As Status
FROM V_IPADMISSIONDETAILS t,CA_CASESHEETREPORTSAVE ca;
IF IPRNO AND IPNO IS NULL THEN
WHERE t.PAYTYPE = CASE WHEN IPAYTYPE = '0' THEN t.PAYTYPE ELSE IPAYTYPE END
AND T.PRNO = CASE WHEN IPRNO = 0 THEN T.PRNO ELSE IPRNO END
AND T.IPATIENTID = CASE WHEN IPNO = 0 THEN T.IPATIENTID ELSE IPNO END
AND T.DEPTCODE = CASE WHEN IDEPTCODE = '0' THEN T.DEPTCODE ELSE IDEPTCODE END
AND t.prno=ca.prno(+) AND t.IPATIENTID=ca.ipatientid(+)
AND ca.status(+)='Received';
ELSE
WHERE t.Disdate BETWEEN IFROMDATE AND ITODATE
AND t.PAYTYPE = CASE WHEN IPAYTYPE = '0' THEN t.PAYTYPE ELSE IPAYTYPE END
AND T.PRNO = CASE WHEN IPRNO = 0 THEN T.PRNO ELSE IPRNO END
AND T.IPATIENTID = CASE WHEN IPNO = 0 THEN T.IPATIENTID ELSE IPNO END
AND T.DEPTCODE = CASE WHEN IDEPTCODE = '0' THEN T.DEPTCODE ELSE IDEPTCODE END
AND t.prno=ca.prno(+) AND t.IPATIENTID=ca.ipatientid(+)
AND ca.status(+)='Received'
ORDER BY T.DISGDATE;
END IF;
END;
Upvotes: 0
Views: 759
Reputation: 35920
As the only difference in two WHERE clause is t.Disdate BETWEEN IFROMDATE AND ITODATE
, it can be handled using CASE ... WHEN
as following:
SELECT
T.PRNO,
T.IPATIENTID,
T.FIRSTNAME,
T.AGE,
T.SEX,
T.DEPTNAME,
T.DISGDATE,
T.PAYTYPE,
NVL(CA.STATUS, 'Not Submited') AS STATUS
FROM
V_IPADMISSIONDETAILS T
LEFT JOIN CA_CASESHEETREPORTSAVE CA
ON ( T.PRNO = CA.PRNO
AND T.IPATIENTID = CA.IPATIENTID )
WHERE
T.PAYTYPE = CASE WHEN IPAYTYPE = '0'
THEN T.PAYTYPE ELSE IPAYTYPE END
AND T.PRNO = CASE WHEN IPRNO = 0
THEN T.PRNO ELSE IPRNO END
AND T.IPATIENTID = CASE WHEN IPNO = 0
THEN T.IPATIENTID ELSE IPNO END
AND T.DEPTCODE = CASE WHEN IDEPTCODE = '0'
THEN T.DEPTCODE ELSE IDEPTCODE END
AND CA.STATUS = 'Received'
AND CASE
WHEN IPRNO IS NULL AND IPNO IS NULL THEN 1
WHEN T.DISDATE BETWEEN IFROMDATE AND ITODATE THEN 1
ELSE 0
END = 1
ORDER BY
CASE WHEN IPRNO IS NOT NULL
AND IPNO IS NOT NULL THEN T.DISGDATE
END;
Note: Always use standard ANSI joins.
Cheers!!
Upvotes: 0