Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Using the SUM function in VFP 8.0 SQL code
Message
General information
Forum:
Visual FoxPro
Category:
Other
Miscellaneous
Thread ID:
00888074
Message ID:
00888178
Views:
65

I don't understand why the 1st and 4th records appear in the results. Does anyone understand why this happens based on the following code?

Because, if you use DST_AMT in the HAVING or WHERE clause,
VFP compare the original field DST_AMT,
and when APTRXDST have more of one rows not zero for one VOUCHER_NO,
then for equal SUM you have different comparison.

THIS IS THE CORRECT SQL SYNTAX
CREATE CURSOR APTRXFIL (VOUCHER_NO I,INV_AMT Y)
INSERT INTO APTRXFIL VALUES (76171 ,606.20)
INSERT INTO APTRXFIL VALUES (76172 ,301.87)
INSERT INTO APTRXFIL VALUES (76173 ,667.75)
INSERT INTO APTRXFIL VALUES (77093 ,706.14)

CREATE CURSOR APTRXDST (VOUCHER_NO I,DST_AMT Y)
INSERT INTO APTRXDST VALUES (76171 ,303.10)
INSERT INTO APTRXDST VALUES (76171 ,303.10)

INSERT INTO APTRXDST VALUES (76172 ,200.00)
INSERT INTO APTRXDST VALUES (76172 ,301.87)

INSERT INTO APTRXDST VALUES (76173 ,675.50)

INSERT INTO APTRXDST VALUES (77093 ,706.14)

SELECT ;
		APTRXFIL.VOUCHER_NO, ;
		APTRXFIL.INV_AMT, ;
		SUM(APTRXDST.DST_AMT) AS SUM_DST_AMT ;
	FROM ;
		APTRXFIL, ;
		APTRXDST ;
	WHERE ;
		APTRXFIL.VOUCHER_NO = APTRXDST.VOUCHER_NO ;
	GROUP BY ;
		APTRXFIL.VOUCHER_NO, ;
		APTRXFIL.INV_AMT ;
	HAVING APTRXFIL.INV_AMT <> SUM_DST_AMT  ;
	INTO CURSOR tmpAPTransactions
BROWSE
If you want preserve the name, then you must reuse the SUM() on HAVING
SELECT ;
		APTRXFIL.VOUCHER_NO, ;
		APTRXFIL.INV_AMT, ;
		SUM(APTRXDST.DST_AMT) AS DST_AMT ;
	FROM ;
		APTRXFIL, ;
		APTRXDST ;
	WHERE ;
		APTRXFIL.VOUCHER_NO = APTRXDST.VOUCHER_NO ;
	GROUP BY ;
		APTRXFIL.VOUCHER_NO, ;
		APTRXFIL.INV_AMT ;
	HAVING APTRXFIL.INV_AMT <> SUM(APTRXDST.DST_AMT)  ;
	INTO CURSOR tmpAPTransactions
next is ambiguous:
SELECT ;
		APTRXFIL.VOUCHER_NO, ;
		APTRXFIL.INV_AMT, ;
		SUM(APTRXDST.DST_AMT) AS DST_AMT ;
	FROM ;
		APTRXFIL, ;
		APTRXDST ;
	WHERE ;
		APTRXFIL.VOUCHER_NO = APTRXDST.VOUCHER_NO ;
	GROUP BY ;
		APTRXFIL.VOUCHER_NO, ;
		APTRXFIL.INV_AMT ;
	HAVING APTRXFIL.INV_AMT <> DST_AMT  ; && VFP use APTRXDST.DST_AMT
	INTO CURSOR tmpAPTransactions
Fabio
Previous
Reply
Map
View

Click here to load this message in the networking platform