2016-10-05 2 views
1

둘 다 서로 독립적으로 필요한 결과를 반환하는 두 개의 쿼리를 만들었습니다. 반환 된 값을 customerName, Amount Ordered 및 Amount Paid로 가져 오기 위해 이들을 조인하려고합니다.어떻게 하위 쿼리 두 조인합니까?

현재이 쿼리는 작동하지만 customerName 만 반환합니다. 다른 두 열을 반환하는 쿼리를 어떻게 얻을 수 있습니까?

SELECT c1.customerName 
FROM 
    (SELECT cc.customerName, ROUND(SUM(od.priceEach * od.quantityOrdered), 2) as '$ Amount Ordered' 
    FROM customers cc 
    INNER JOIN orders o ON o.customerNumber = cc.customerNumber 
    INNER JOIN orderdetails od ON od.orderNumber = o.orderNumber 
    GROUP BY cc.customerName 
    ) c1 
INNER JOIN 
    (SELECT c.customerName, ROUND(SUM(p.amount), 2) as 'Total $ Amount Paid' 
    FROM customers c 
    INNER JOIN payments p ON p.customerNumber = c.customerNumber 
    GROUP BY c.customerName 
    ) c2 
WHERE c1.customerName = c2.customerName 
GROUP BY c1.customerName 
ORDER BY c1.customerName; 

답변

2

이 다른 컬럼

SELECT c1.customerName, c1.Amount_Ordered as '$ Amount Ordered', c2.Total_Amount_Paid as 'Total $ Amount Paid' 
FROM 
    (SELECT cc.customerName, ROUND(SUM(od.priceEach * od.quantityOrdered), 2) as Amount_Ordered 
    FROM customers cc 
    INNER JOIN orders o ON o.customerNumber = cc.customerNumber 
    INNER JOIN orderdetails od ON od.orderNumber = o.orderNumber 
    GROUP BY cc.customerName 
    ) c1 
INNER JOIN 
    (SELECT c.customerName, ROUND(SUM(p.amount), 2) as Total_Amount_Paid 
    FROM customers c 
    INNER JOIN payments p ON p.customerNumber = c.customerNumber 
    GROUP BY c.customerName 
    ) c2 
WHERE c1.customerName = c2.customerName 
GROUP BY c1.customerName 
ORDER BY c1.customerName; 
+0

도움을 주셔서 감사합니다. 이것은 물건을 정리했다. –

1
단순히

선택 섹션에 추가 선택해야합니다 :

SELECT c1.customerName, C1.amountOrdered, C2.amountPaid FROM ... 

그리고 조언을 하나 더 말씀을 - DONT는 $와 같은 공백 또는 특수 부호를 사용 당신의 칼럼 이름에서, 그것은 나쁜 습관입니다. 내 생각에 MySQL이 허용하는 실수라고 생각한다.

+0

팁 주셔서 감사합니다. 나는 SQL에 익숙하지 않았기 때문에 그것을 몰랐다. –

관련 문제