2016-10-31 2 views
0

이 질문이 전에 부탁되었으므로 올바른 방향으로 조종하도록 도와주세요. 제 질문은 이것입니다.SQL Join을 여러 번 추가 할 경우

나는 2 개 테이블에서 판매 데이터를 수집하여 SQL 쿼리가 - CustomerInvoiceCustomerInvoiceDetail

CustomerInvoice 등 고객의 이름과 송장에 대한 일반 데이터를 포함, 등 해결을뿐만 아니라화물의 양이 포함되어 있습니다.

예 테이블 데이터 (송장 번호 당 하나 개의 레코드) :

╔══════════════╦═══════════════╦════════════════════════════╦═════════╗ 
║ Invoice Code ║ Customer Name ║ Address     ║ Freight ║ 
╠══════════════╬═══════════════╬════════════════════════════╬═════════╣ 
║ INV-200000 ║ ABC Co  ║ 1 Apple Street, FRUITVILLE ║ 20  ║ 
╚══════════════╩═══════════════╩════════════════════════════╩═════════╝ 

CustomerInvoiceDetail 송장에서 각 개별 항목에 대한 정보가 포함되어 있습니다. 하나의 송장에는 여러 개의 개별 항목이있는 경우가 많습니다.

예 테이블 데이터 (송장 번호 당 여러 레코드)

╔══════════════╦═════════════╦══════════╦═══════╦══════════╗ 
║ Invoice Code ║ Part Number ║ Quantity ║ Price ║ ExtPrice ║ 
╠══════════════╬═════════════╬══════════╬═══════╬══════════╣ 
║ INV-20000 ║ 50505  ║ 2  ║ 5  ║ 10  ║ 
╠══════════════╬═════════════╬══════════╬═══════╬══════════╣ 
║ INV-20000 ║ 51325  ║ 3  ║ 2  ║ 6  ║ 
╚══════════════╩═════════════╩══════════╩═══════╩══════════╝ 

이것은,화물 $은 40 것이다 샘플 케이스에 의미하는 CustomerInvoice 테이블에서 여러 결과 내 JOIN 결과를 의미한다 : 2 라인 항목 x 20 달러화물. 다음과 같이

내 쿼리는

나는 현재지고있어 무엇

, 판매 가격 + (화물은 (테이블 CustomerInvoiceDetail에) 라인 항목의 수에 의해 (표 CustomerInvoice에)화물의 양을 곱 * 라인의 수 CustomerInvoiceDetail의 항목) 내가 필요한 것은

, 샘플의 경우화물의 판매 가격 + 하나 개의 인스턴스이다 (10 + 6 + 20)

SELECT 
    SUM(cid.ExtPrice + ci.Freight) AS 'Sales' 
FROM CustomerInvoice ci 
JOIN CustomerInvoiceDetail cid ON ci.InvoiceCode = cid.InvoiceCode 

사람이 어떤 제안이나 그들이 날 지점 수있는 자원이 있다면 이것을 연구하기 위해, 나는 가장 감사 할 것입니다! 다시 한번 감사드립니다.

+3

원하는 출력은 무엇입니까? 아마도 그것은 나뿐이지만, 여기에 정확히 * 질문이 보이지 않습니다 ... 당신이 명확히 할 수 있습니까? – Santi

+1

및 질문? – James

+0

@Santi - 너뿐 아니라 ... –

답변

0

당신은 당신이 합을 전에 집계해야합니다

SELECT (cid.ExtPrice + ci.Freight) AS Sales 
FROM (SELECT SUM(ci.Freight) as Freight 
     FROM CustomerInvoice ci 
    ) ci CROSS JOIN 
    (SELECT SUM(cid.ExtPrice) as ExtPrice 
     FROM CustomerInvoiceDetail cid 
    ) cid; 

JOIN의 각 송장 Freight의 행의 수를 곱 때문이다.

+0

고든에게 감사드립니다!나는 단순한 SQL 언어에만 익숙하다. 조금 더 대답 해 주겠니? 아니면 어떤 문서를 가르쳐 주시겠습니까? –

+0

ID 열을 기준으로 그룹화하고 조인 할 필요가 없습니까? – Hogan

+0

@Hogan. . . 원래 질문은 전체 전체를 찾고있는 것으로 보입니다. –

0

난 당신이 같은 일을 수행하여 하위 쿼리를 피할 수 있다고 생각 :

SELECT 
    cid.InvoiceCode, SUM(cid.ExtPrice) + MAX(ci.Freight) AS 'Sales' 
FROM CustomerInvoice ci 
JOIN CustomerInvoiceDetail cid ON ci.InvoiceCode = cid.InvoiceCode 
GROUP BY cid.InvoiceCode 

샘플 출력 :

╔══════════════╦═════════════╗ 
║ Invoice Code ║ Sales  ║ 
╠══════════════╬═════════════╣ 
║ INV-20000 ║ 36   ║ 
╠══════════════╬═════════════╣ 
║ INV-20001 ║ 100   ║ 
╠══════════════╬═════════════╣ 
║ INV-20002 ║ 50   ║ 
╚══════════════╩═════════════╝ 

당신은 할 필요가있는 경우 WHERE InvoiceCode='INV-20000'는 하나의 송장을 선택하기 위해 추가 할 수 있습니다.

+0

그룹이 필요합니다. – Hogan

+0

@Hogan 맞습니다. 나는 이것이 효과가 있어야한다고 생각한다. – Santi

+0

@Santi화물을 포함하여 총 판매액을주기 위해이 인보이스 코드를 그룹화 할 방법이 있습니까? 'MAX'를 사용하면 하나의화물 금액 만 선택합니다. 가장 큰 것 –

관련 문제