2016-12-04 5 views
-1

Ich versuche, eine Baseball-Datenbank von MS Access abzufragen, aber meine SQL-Anweisung bleibt auf einem fehlenden Operator stecken. Im Folgenden finden Sie die SQL-Abfrage, die ich vorbei:Fehlender Operator in SQL-Abfrage

SELECT 
    Master.nameFirst, Master.nameLast, 
    Master.nameFirst + ' ' + Master.nameLast as FULLNAME, 
    (SUM(Batting.H) + SUM(Batting.BB) + SUM(Batting.HBP))/(SUM(Batting.AB) + SUM(Batting.BB) + SUM(Batting.HBP)) as OBP, 
    SUM(Batting.H)/(SUM(Batting.H) + SUM(Batting.BB) + SUM(Batting.HBP)) as HitP, 
    (SUM(Batting.2B) + SUM(Batting.3B) + SUM(Batting.HR))/SUM(Batting.H) as ExtraP, 
    SUM(Batting.HR)/(SUM(Batting.2B) + SUM(Batting.3B) + SUM(Batting.HR)) as HRP, 
    SUM(Batting.3B)/(SUM(Batting.2B) + SUM(Batting.3B)) as TriplePerc, 
    SUM(Batting.HBP)/(SUM(Batting.BB) + SUM(Batting.HBP)) as HBPP 
FROM 
    Master 
INNER JOIN 
    Batting ON Master.playerID = Batting.playerID 
WHERE 
    (Batting.playerID IN (SELECT playerID 
          FROM Master 
          WHERE (nameFirst = 'Ryan' AND nameLast = 'Howard')) 

Der fehlende Bedienfehler scheint auf diesem einzigen Ausdruck zu konzentrieren:

(SUM(Batting.2B) + SUM(Batting.3B) + SUM(Batting.HR))/SUM(Batting.H) as ExtraP 

Aber ich etwas falsch mit ihm ehrlich gesagt nicht sehen. Was vermisse ich?

+0

Warum nicht die Abfrage vereinfachen, indem Sie Bedingungen entfernen, bis Sie das Problem lösen? Wenn Sie es immer noch nicht lösen, dann stellen Sie eine Frage. –

+1

Ist wirklich '2B' Ihr Spaltenname? Das sollte das Problem sein. Welches DBMS benutzen Sie? –

+1

Fügen Sie bitte - (1) ein relevantes Tag für Datenbank + Version (2) die DDL der relevanten Tabelle hinzu (denken Sie, wie einfach es wäre, Sie zu unterstützen) –

Antwort

0

Auch nur einen Vorschlag zu machen, wenn Sie Aliase verwenden, und Ihre SQL-Format, können Sie Ihren Code leichter zu lesen, zu verstehen und zu debuggen finden:

SELECT m.nameFirst, m.nameLast, 
    m.nameFirst + ' ' + m.nameLast FULLNAME, 
    (SUM(b.H) + SUM(b.BB) + SUM(b.HBP))/
    (SUM(b.AB) + SUM(b.BB) + SUM(b.HBP)) OBP, 
    SUM(b.H)/(SUM(b.H) + SUM(b.BB) + SUM(b.HBP)) HitP, 
    (SUM(b.2B) + SUM(b.3B) + SUM(b.HR))/SUM(b.H) ExtraP, 
    SUM(b.HR)/(SUM(b.2B) + SUM(b.3B) + SUM(b.HR)) HRP, 
    SUM(b.3B)/(SUM(b.2B) + SUM(b.3B)) TriplePerc, 
    SUM(b.HBP)/(SUM(b.BB) + SUM(b.HBP)) HBPP 
FROM Master m JOIN Batting b 
    ON b.playerID = m.playerID 
    and b.playerId IN 
     (SELECT playerID FROM Master 
     WHERE(nameFirst = 'Ryan' 
      AND nameLast = 'Howard') 
+0

Es ist Teil einer C# Zeichenfolge. Entschuldigung für die schlechte Formatierung! – jDave1984

+0

Ich denke, Sie vermissen alle Ihre "AS xxx" für die Berechnungen? Schauen Sie sich 'SUM (b.3B)) an TriplePerc,' –

+0

die "as" s sind optional in SQL. –

0

Es sind die vier Zeilen wie:

SUM(Batting.H)/(SUM(Batting.H) + SUM(Batting.BB) + SUM(Batting.HBP)) as HitP, 

sollte sein:

SUM(Batting.H)/((SUM(Batting.H) + SUM(Batting.BB) + SUM(Batting.HBP)) as HitP, 

oder:

SUM(Batting.H)/(SUM(Batting.H) + SUM(Batting.BB) + SUM(Batting.HBP) as HitP, 

bearbeiten

Oh mein Gott, waren alle falsch. Es ist die schließende Klammer, die fehlt - oder lassen Sie die erste öffnende Klammer weg:

WHERE 
    (Batting.playerID IN (SELECT playerID 
          FROM Master 
          WHERE (nameFirst = 'Ryan' AND nameLast = 'Howard')) 
+0

Vielleicht bin ich bereit für Fußball, aber bist du dir sicher über die "sollte sein" -Syntax? Die() Paare scheinen jetzt unausgewogen? –

+0

Nun, ich weiß nicht, was der Zweck der Berechnung ist, so teilt der erste H mit (H + BB + HBP) ​​_, während der zweite H mit H_ und dann _adds BB + HBP_ teilt. Aber das letzte macht nicht viel Sinn, ich sehe jetzt. Also das "sollte sein" scheint mir richtig zu sein. – Gustav

+1

Ich mache die alte 'behalten Sie eine Zählung von Parens, Hinzufügen von 1 für jeden' ('und subtrahieren 1 für jeden') '. Hoffe, mit Null zu enden. Ich bekomme ein extra '(' mit beiden 'sollte sein' und 'oder:'? Fehle ich etwas? :) –

Verwandte Themen