2016-07-15 19 views
0

Ich habe ein Problem mit einer SQL-Datenbank, die ich mit Oracle 11g Express Edition einrichten. Ich möchte in der Lage sein, eine SELECT-Abfrage auszuführen, in der ich für jeden Kunden die Nummer des Kunden und die Summe aller Kredittransaktionen des Kunden (Transaktionen mit einer Art "C") für Konten anzeigen möchte, die eine offene haben Status.Abfrage über mehrere Tabellen und Zeilen/Spalten

Problem ... Ich habe die verschiedenen Arten von Query-Befehlen angeschaut und ich bin völlig verloren, wie ich diesen Befehl in den einfachsten Begriffen formatieren sollte. Jede Hilfe wäre willkommen. Hier ist meine Tabellenformatierung:

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 
); 

Was habe ich bisher ist in dieser Richtung:

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 

Aber ich habe das Gefühl, dass ich wirklich mit diesem off base bin.

Alle Hinweise oder Lösungen würden sehr geschätzt werden. Wenn Sie mehr Informationen benötigen, würde ich gerne geben, was ich kann.

Antwort

0

Einfache Regel: Nie Verwenden Sie Kommas in der FROM Klausel. Immer verwenden Sie die richtige, explizite JOIN Syntax.

Sie vermissen auch eine GROUP BY, so dass ich denke du meinst:

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; 

Sie nicht an den Kunden Tabelle beitreten müssen, weil die Account Tabelle die Kundennummer, die für die Aggregation hat.

+0

Wenn Sie die "Account-Tabelle" verwenden, meinen Sie Account_DML oder die Account-Spalte? Ich habe versucht, dies in meine Befehlszeile einzufügen und erhalte mehrere Fehler. – Smackelbap

+0

Und wenn ich das korrigiere "Account_DML" bekomme ich einen Fehler in Zeile 5, wo es "C" heißt. "Kunde": ungültige Kennung. – Smackelbap

+0

Ich habe eine Bearbeitung mit Korrekturen eingereicht. Versuchen Sie, c.Customer zu a.Customer sowohl in der Auswahl als auch in der Gruppe zu ändern. –