2016-07-15 1 views
0

SQL 데이터베이스에 문제가 있습니다. Oracle 11g Express Edition을 사용하여 설정하고 있습니다. 각 고객에 대해 고객의 번호와 해당 고객의 신용 거래 ('C'유형의 거래)의 합계를 보여주고 싶은 SELECT 쿼리를 실행할 수 있기를 원합니다. 지위.여러 테이블과 행/열에 대한 쿼리

문제 ... 여러 가지 유형의 쿼리 명령을 살펴본 결과 가장 간단한 용어로이 명령을 어떻게 형식화해야하는지 완전히 잊어 버렸습니다. 어떤 도움을 주시면 감사하겠습니다.

CREATE TABLE Customer_DML 

    CustomerNumber CHAR(12) CONSTRAINT customer_pk PRIMARY KEY, 

    SSN CHAR(9) CONSTRAINT customer_uq_ssn UNIQUE, 

    FirstName VARCHAR2(25) CONSTRAINT customer_nn_fname NOT NULL, 

    LastName VARCHAR2(25) CONSTRAINT customer_nn_lname NOT NULL, 

    Telephone CHAR(10), 

    DateOfBirth DATE 
); 



CREATE TABLE Account_DML (

    AccountNumber CHAR(15) CONSTRAINT account_pk PRIMARY KEY, 

    Type CHAR(1) CONSTRAINT account_ck_type CHECK (Type IN ('S','C')), 

    DateCreated DATE DEFAULT SYSDATE CONSTRAINT account_nn_datecreated NOT NULL, 

    Status VARCHAR2(10) CONSTRAINT account_nn_status NOT NULL, 

    Customer CHAR(12) CONSTRAINT account_fk_customer REFERENCES 
Customer_DML(CustomerNumber) 

ON DELETE CASCADE 
); 


CREATE TABLE Transaction_DML (

    TransactionNumber CHAR(15) CONSTRAINT transaction_pk PRIMARY KEY, 

    Type CHAR(1) CONSTRAINT transaction_ck_type CHECK (Type IN ('D','C')), 

    Amount Number(10,2) CONSTRAINT transaction_nn_amount NOT NULL, 

    Account CHAR(15) CONSTRAINT transaction_fk_account REFERENCES Account_DML(AccountNumber) 

ON DELETE SET NULL 
); 

내가 지금까지 가지고하는이 라인을 따라입니다 : 여기 내 테이블 형식입니다

SELECT c.CustomerNumber, 
t.SUM(Amount) AS SumAmt 
FROM Customer_DML c, Account_DML a 
ON c.CustomerNumber = a.Customer 
JOIN Transaction_DML t 
ON a.Customer = a.AccountNumber 

하지만 난 정말이와 기본 떨어져 나는 느낌이 듭니다.

모든 힌트 나 해결책을 제공해 주시면 대단히 감사하겠습니다. 더 많은 정보가 필요하면 할 수있는 것을 기꺼이 줄 것입니다.

답변

0

간단한 규칙 : FROM 절에 쉼표를 사용하십시오. 항상은 적절하고 명시적인 JOIN 구문을 사용합니다.

또한 GROUP BY 누락, 그래서 당신 말은 생각 다음 Account 표는 집계에 필요한 고객 번호를 가지고 있기 때문에 당신은 고객 테이블에 가입 할 필요가 없습니다

SELECT a.Customer as CustomerNumber, SUM(t.Amount) AS SumAmt 
FROM Account_DML a 
JOIN Transaction_DML t 
    ON t.Account = a.AccountNumber 
GROUP BY a.Customer; 

.

+0

"계정 테이블"을 사용할 때 Account_DML 또는 계정 열을 의미합니까? 이것을 명령 줄에 붙여 넣으려고 시도했지만 몇 가지 오류가 발생했습니다. – Smackelbap

+0

그리고 이것을 "Account_DML"로 정정 할 때 "C"라고 표시된 5 행에서 오류가 발생합니다. "Customer": 식별자가 잘못되었습니다. – Smackelbap

+0

수정 사항이있는 수정 사항을 제출했습니다. 선택 및 그룹별로 c.Customer를 a.Customer로 변경해보십시오. –