Subquery works alone, but not with query.

Bee

Registered User.
Local time
Today, 04:32
Joined
Aug 1, 2006
Messages
486
Hi,

I have written a subquery that works fine alone, but it returns -1 when with query.

The subquery is supposed to return a total of type currency.

Any help/suggestions will be very much appreciated.

Code:
SELECT tblSite.Name, tblPhase.Phase_No, tblVariation_Order.Customer_No, Exists (SELECT Sum(tblVariation_Order.VO_Price)
FROM tblCustomer INNER JOIN tblVariation_Order ON tblCustomer.Customer_No=tblVariation_Order.Customer_No
GROUP BY tblCustomer.Customer_No;) AS Expr1
FROM (tblCustomer INNER JOIN tblVariation_Order ON tblCustomer.Customer_No = tblVariation_Order.Customer_No) INNER JOIN (tblSite INNER JOIN (tblPhase INNER JOIN tblHouse ON tblPhase.Phase_No = tblHouse.Phase_No) ON tblSite.Site_No = tblPhase.Site_No) ON tblCustomer.Customer_No = tblHouse.Customer_No
WHERE (((Exists (SELECT Sum(tblVariation_Order.VO_Price)
FROM tblCustomer INNER JOIN tblVariation_Order ON tblCustomer.Customer_No=tblVariation_Order.Customer_No
GROUP BY tblCustomer.Customer_No;))=True));
 
Change : Exists (SELECT Sum(tblVariation_Order.VO_Price)
To: (SELECT Sum(tblVariation_Order.VO_Price) as MyCol

You may need to add some criteria to that subselect to tie it to the main query.
The Exist function returns true or false, hence you -1
 
it only works if I include ANY or ALL! If I remove them, it says: "A subquery of this kind cannot return more than one record. Revise the SELECT statement of the subquery to request only one record." I tried many combinations, but I must be doing something wrong.

Code:
SELECT tblHouse.House_No, tblHouse.House_Address, tblHouse.Town, tblVariation_Order.VO_Price = ALL

(SELECT sum(tblVariation_Order.VO_Price)  FROM tblCustomer INNER JOIN tblVariation_Order ON tblCustomer.Customer_No=tblVariation_Order.Customer_No GROUP BY tblCustomer.Customer_No ;) AS Expr1

FROM tblSite INNER JOIN (tblPhase INNER JOIN ((tblCustomer INNER JOIN tblHouse ON tblCustomer.Customer_No = tblHouse.Customer_No) INNER JOIN tblVariation_Order ON tblCustomer.Customer_No = tblVariation_Order.Customer_No) ON tblPhase.Phase_No = tblHouse.Phase_No) ON tblSite.Site_No = tblPhase.Site_No;
 
Try THis first, see where it leads:
Code:
SELECT tblSite.Name, tblPhase.Phase_No, tblVariation_Order.Customer_No, Sum(tblVariation_Order.VO_Price)
FROM tblCustomer 
INNER JOIN tblVariation_Order ON tblCustomer.Customer_No=tblVariation_Order.Customer_No
INNER JOIN tblSite ON tblCustomer.Customer_No = tblHouse.Customer_No
INNER JOIN tblPhase ON tblSite.Site_No = tblPhase.Site_No
INNER JOIN tblHouse ON tblPhase.Phase_No = tblHouse.Phase_No
GROUP BY tblCustomer.Customer_No
having Sum(tblVariation_Order.VO_Price) <> 0;
 
FoFa said:
Try THis first, see where it leads:
Code:
SELECT tblSite.Name, tblPhase.Phase_No, tblVariation_Order.Customer_No, Sum(tblVariation_Order.VO_Price)
FROM tblCustomer 
INNER JOIN tblVariation_Order ON tblCustomer.Customer_No=tblVariation_Order.Customer_No
INNER JOIN tblSite ON tblCustomer.Customer_No = tblHouse.Customer_No
INNER JOIN tblPhase ON tblSite.Site_No = tblPhase.Site_No
INNER JOIN tblHouse ON tblPhase.Phase_No = tblHouse.Phase_No
GROUP BY tblCustomer.Customer_No
having Sum(tblVariation_Order.VO_Price) <> 0;
I will try that. Thank you.
 
Hi Fofa,

I managed to fix it.

Code:
SELECT tblHouse.House_No, Sum(tblVariation_Order.VO_Price) AS SumOfVO_Price
FROM tblSite 
INNER JOIN (tblPhase 
INNER JOIN ((tblCustomer 
INNER JOIN tblHouse ON tblCustomer.Customer_No = tblHouse.Customer_No) INNER JOIN tblVariation_Order ON tblCustomer.Customer_No = tblVariation_Order.Customer_No) ON tblPhase.Phase_No = tblHouse.Phase_No) ON tblSite.Site_No = tblPhase.Site_No

GROUP BY tblHouse.House_No;

When I added a calculated field to the query, the sum function did not work properly!

Thanks for your help.
B
 
Last edited:

Users who are viewing this thread

Back
Top Bottom