> SELECT TotalInvoice, (SELECT SUM(PaymentValue) FROM Payments 
> WHERE Payments.IDInvoice = IDInvoice) AS TotalPaid, TotalPaid = TotalInvoice 
> AS FullyPaid FROM Invoices;
> 
> Here, I select:
> - TotalInvoice the total amount of the invoice
> - TotalPaid the total amount paid till now
> - FullyPaid a boolean flag indicating if the invoice is paid or not

select TotalInvoice, paid.totalpaid, (paid.totalpaid = TotalInvoice) as 
FullyPaid
from   Invoices,
       (
            select  Payments.IDInvoice as IDInvoice, sum(PaymentValue) as 
totalpaid
            from    Payments
            where   Payments.IDInvoice = Invoices.IDInvoice
            group by payments.idinvoice
       ) as paid
where  Invoices.IDInvoice = paid.IDInvoice;

Haven't checked that in any way, but it seems to be what you wanted.  Things 
like that work in MS SQL Server 2000, though the boolean thing is something 
I've never tried.  Worse comes to worse, you can always do that part in your 
code, which is where (*my* DBA says, anyway) it belongs anyway, since it's 
application logic and not data logic. :-)

You could also do it as a join if you wanted to.

Brad


Reply via email to