I have a sql statement as below. Cardtran or cardt could both hold more than one entry for the same posid and postrans number. Postranh/Postr would only have those numbers once. My sql statement appears to only select one entry from cardt or cardtran unless the trantype number is different. I require all the cardt/cartran entries which meet the criteria. Can anyone see where I've gone wrong or give me general comments on my SQL statement. Thanks
Fromdate = ctod("05/12/2002")
Todate = Fromdate
sCURFILTER = ".AND. CLIENT.SYSREF = 111 .AND. BETWEEN(POSTRANH.DATE, FromDate, ToDate)"
sARCFILTER = ".AND. CLIENT.SYSREF = 111 .AND. BETWEEN(POSTR.DATE, FromDate, ToDate)"
set default to c:\3100
SELECT CARDTRAN.POSID, CARDTRAN.POSTRAN,CARDTRAN.DATE,CARDTRAN.TIME,Client.sysref,;
Title, Firstname, Surname, Cardnum AS Number, Cardtran.amount, Cardtran.Openbal, Trantype.name ;
into cursor temp;
from cardtran ;
LEFT OUTER JOIN POSTRANH ;
ON PADL(CARDTRAN.POSID, 2, '0') + PADL(CARDTRAN.POSTRAN, 10, '0') ;
= PADL(POSTRANH.POSID, 2, '0') + PADL(POSTRANH.TRANS, 10, '0') ;
LEFT OUTER JOIN TRANTYPE ;
ON CARDTRAN.TYPE = TRANTYPE.SYSREF ;
INNER JOIN CARD ;
ON CARDTRAN.CARDNUM = CARD.NUMBER ;
INNER JOIN CLIENT ;
ON CARD.CLIENT = CLIENT.SYSREF ;
WHERE POSTRANH.STATUS = 0;
&sCURFILTER;
GROUP BY 12 ;
UNION ALL ;
SELECT CARDT.POSID, CARDT.POSTRAN AS TRANS ,CARDT.DATE,CARDT.TIME,Client.sysref,;
Title, Firstname, Surname, Cardnum AS Number, Cardt.amount, Cardt.Openbal, Trantype.name ;
from cardt ;
LEFT OUTER JOIN POSTR ;
ON PADL(CARDT.POSID, 2, '0') + PADL(CARDT.POSTRAN, 10, '0') ;
= PADL(POSTR.POSID, 2, '0') + PADL(POSTR.TRANS, 10, '0') ;
LEFT OUTER JOIN TRANTYPE ;
ON CARDT.TYPE = TRANTYPE.SYSREF ;
INNER JOIN CARD ;
ON CARDT.CARDNUm = CARD.NUMBER ;
INNER JOIN CLIENT ;
ON CARD.CLIENT = CLIENT.SYSREF ;
WHERE POSTR.STATUS = 0;
&sARCFILTER ;
GROUP BY 12
*, POSTR.POSID, POSTR.TRANS
* GROUP BY CardNum, POSTRANH.POSID, POSTRANH.TRANS;
SELECT * FROM TEMP ;
INTO CURSOR TEMP2;
ORDER BY SURNAME, FIRSTNAME, DATE, TIME
browse
Fromdate = ctod("05/12/2002")
Todate = Fromdate
sCURFILTER = ".AND. CLIENT.SYSREF = 111 .AND. BETWEEN(POSTRANH.DATE, FromDate, ToDate)"
sARCFILTER = ".AND. CLIENT.SYSREF = 111 .AND. BETWEEN(POSTR.DATE, FromDate, ToDate)"
set default to c:\3100
SELECT CARDTRAN.POSID, CARDTRAN.POSTRAN,CARDTRAN.DATE,CARDTRAN.TIME,Client.sysref,;
Title, Firstname, Surname, Cardnum AS Number, Cardtran.amount, Cardtran.Openbal, Trantype.name ;
into cursor temp;
from cardtran ;
LEFT OUTER JOIN POSTRANH ;
ON PADL(CARDTRAN.POSID, 2, '0') + PADL(CARDTRAN.POSTRAN, 10, '0') ;
= PADL(POSTRANH.POSID, 2, '0') + PADL(POSTRANH.TRANS, 10, '0') ;
LEFT OUTER JOIN TRANTYPE ;
ON CARDTRAN.TYPE = TRANTYPE.SYSREF ;
INNER JOIN CARD ;
ON CARDTRAN.CARDNUM = CARD.NUMBER ;
INNER JOIN CLIENT ;
ON CARD.CLIENT = CLIENT.SYSREF ;
WHERE POSTRANH.STATUS = 0;
&sCURFILTER;
GROUP BY 12 ;
UNION ALL ;
SELECT CARDT.POSID, CARDT.POSTRAN AS TRANS ,CARDT.DATE,CARDT.TIME,Client.sysref,;
Title, Firstname, Surname, Cardnum AS Number, Cardt.amount, Cardt.Openbal, Trantype.name ;
from cardt ;
LEFT OUTER JOIN POSTR ;
ON PADL(CARDT.POSID, 2, '0') + PADL(CARDT.POSTRAN, 10, '0') ;
= PADL(POSTR.POSID, 2, '0') + PADL(POSTR.TRANS, 10, '0') ;
LEFT OUTER JOIN TRANTYPE ;
ON CARDT.TYPE = TRANTYPE.SYSREF ;
INNER JOIN CARD ;
ON CARDT.CARDNUm = CARD.NUMBER ;
INNER JOIN CLIENT ;
ON CARD.CLIENT = CLIENT.SYSREF ;
WHERE POSTR.STATUS = 0;
&sARCFILTER ;
GROUP BY 12
*, POSTR.POSID, POSTR.TRANS
* GROUP BY CardNum, POSTRANH.POSID, POSTRANH.TRANS;
SELECT * FROM TEMP ;
INTO CURSOR TEMP2;
ORDER BY SURNAME, FIRSTNAME, DATE, TIME
browse