2014-02-22 4 views
0

오전 '가장 한 레코드에서이 하위 쿼리에 의해 반환 될 수있다'는 3 개 테이블을 연결하려고하지만 오류를 얻고있다 At most one record can be returned by this subqueryMS 액세스 오류 :

내 코드

SELECT InvoiceNumber, 
     Terms(SELECT PaymentTerms 
       FROM PSD_customerPaymentTerms 
       WHERE PSD_customerPaymentTerms.PTId = NewInvoice_1.Terms 
      ) AS Terms, 
     InvoiceDate, 
     OurQuote, 
     SalesPerson(SELECT FirstName 
        FROM Employee 
        WHERE Employee.EmployeeId = NewInvoice_1.SalesPerson 
      ) AS SalesPerson, 
     CustomerName(SELECT CustomerName 
         FROM Customer 
        WHERE Customer.CustomerId = NewInvoice_1.CustomerName 
      ) AS CustomerName, 
     OrderNumber, 
     GrandTotal, 
     (SELECT SUM(PaymentAmount) 
      FROM Payment_Receipt 
     WHERE Payment_Receipt.InvoiceNumber=NewInvoice_1.InvoiceNumber 
      ) AS AmountPaid, 
     GrandTotal-IIf(AmountPaid Is Null,0,AmountPaid) AS AmountDue, 
     (SELECT InvoiceStatus 
      FROM Payment_Receipt 
     WHERE Payment_Receipt.InvoiceNumber=NewInvoice_1.InvoiceNumber 
      ) AS Status -- Error getting after adding this line. 
      FROM NewInvoice_1; 

Payment_Receipt 표 이드, 송장 포함입니다 아니요, 고객 이름, 총 지불액, 잔액 금액, 지불 날짜, 지불 금액, 지불 유형, 지불 메모, InvoiceStatus.

이것은 Payment Table

방법이 표에서 InvoiceStatus을 얻을 내 테이블 ?? 이 문제를 해결하기

+2

오류 메시지가 분명 해 보입니다. 조인이 작동하려면 해당 하위 쿼리에서 반환 된 단일 레코드가 있어야합니다. 당신이 그것을 스스로 실행하면 어떻게됩니까? 얼마나 많은 행 (레코드)이 반환됩니까? 둘 이상인 경우 WHERE 절을보다 제한적으로 만들어 단일 행을 반환해야합니다. –

+0

그리고이 쿼리로 얻으려는 것이 무엇이든 얻을 수있는 최적의 것 같지 않습니다. – Alexander

+0

모든 행에이 '#Name?'값을 표시하는 행이 하나만 나타납니다. – Srihari

답변

2

한 일반적인 방법은 열 max()를 사용하여 하나 개의 행을 반환하는 하위 쿼리를 강제하는 것입니다 경우

select max(someColumn) 
from someTable 
where ... 

데이터는 where 절에 대해 여러 행이 있습니다.

이 방법을 사용하면 쿼리가 작동하지만 원하는 결과를 얻지 못할 수 있습니다. where 절이 작동 할 확률이 높습니다. 즉, 문제를 진단 할 때 매우 유용 할 수 있습니다. 특히 어떤 하위 쿼리로 인해 문제가 발생하는지 확실하지 않은 경우 한 번에 하나의 하위 쿼리 만 제거 할 수 있습니다.