2014-09-30 63 views
0

我正在尝试使用先前声明的列来计算列。我认为这将在MySQL中起作用,但我不确定PostgreSQL中该如何做。如何使用PostgreSQL中以前定义的列进行计算?

我的声明是这样的:

SELECT customerNumber, customerName, (
    SELECT COALESCE(SUM(payments.amount), 0) 
    FROM payments 
    WHERE customers.customerNumber = payments.customerNumber 
) as totalOfPaymentsMade,(
    SELECT COALESCE(SUM(orderdetails.priceeach * orderdetails.quantityordered), 0) 
    FROM orders 
    LEFT JOIN orderdetails ON orderdetails.ordernumber = orders.ordernumber 
    WHERE customers.customerNumber = orders.customerNumber 
) as totalValueOfAllOrdersMade, creditLimit, creditLimit + totalOfPaymentsMade - totalValueOfAllOrdersMade as amountOfAvailableCredit 
FROM customers 
ORDER BY customerNumber 

我收到此错误信息:column "totalofpaymentsmade" does not exist LINE 11: ...lValueOfAllOrdersMade, creditLimit, creditLimit + totalOfPay...

+0

不要你错过了GROUP BY中的款项报表? – CapelliC 2014-09-30 16:27:23

+0

我想我现在不需要GROUP BY语句,因为我使用的是subquerys,并且希望SUM匹配我的WHERE子句的所有行。 – Sebastian 2014-09-30 16:36:31

回答

0

试试这个:

SELECT 
    *, 
    creditLimit + totalOfPaymentsMade - totalValueOfAllOrdersMade 
    as amountOfAvailableCredit 
from 
(

SELECT 
    customerNumber, 
    customerName, 
    creditLimit, 

    (
     SELECT COALESCE(SUM(payments.amount), 0) 
     FROM payments 
     WHERE customers.customerNumber = payments.customerNumber 
    ) 
    as totalOfPaymentsMade, 

    (
     SELECT COALESCE(SUM(orderdetails.priceeach * orderdetails.quantityordered), 0) 
     FROM orders 
     LEFT JOIN orderdetails ON orderdetails.ordernumber = orders.ordernumber 
     WHERE customers.customerNumber = orders.customerNumber 
    ) 
    as totalValueOfAllOrdersMade 

FROM customers 

) a 

ORDER BY customerNumber 
+0

非常感谢!为我节省了几个小时! – Sebastian 2014-09-30 23:29:09

相关问题