2017-04-20 7 views
0

Ich habe eine Tabelle des Maklers zu speichern, die wie folgt aussieht:SQL Join-Abfrage in MS Access

AgentTable

In einem anderen Tisch, ich habe Informationen Steuerklasse, die wie folgt aussieht:

TaxTable

Ich muss eine Abfrage auf den 2 Tabellen ausführen, in denen ich den Namen des Agenten, den Gesamtbetrag der Steuern, die sie basierend auf der Steuerklasse, in die sie fallen und ihr Gehalt, der Name ihres Vorgesetzten ein d die Höhe der Steuer, die die Aufsichtsbehörde auch zahlt, basierend auf der Steuerklasse, in die sie fallen, und ihrem Gehalt. Dieser Zweck der Abfrage soll zeigen, dass die Vorgesetzten aufgrund der Prozentsätze der Steuerklassen einen viel größeren Steuerbetrag zahlen als ihre Untergebenen.

Hier ist die Abfrage, die ich bisher formuliert habe:

Select A.AgentName AS AgentName, 
((A.Salary)*(Select S.PlusPercentage FROM TaxBracket AS S WHERE A.Salary >=S.FromEarnings AND A.Salary <= S.ToEarnings) + S.BasicTax) AS "Tax Paid By Agent" , 
B.AgentName AS "Supervisor", 
((B.Salary)*(Select T.PlusPercentage FROM TaxBracket AS T WHERE A.Salary >=T.FromEarnings AND A.Salary <= T.ToEarnings) + T.BasicTax) AS "Tax Paid By Supervisor" , 
FROM Agent AS 'A', TaxBracket AS 'S', Agent AS 'B', TaxBracket AS 'T' 
WHERE A.Supervisor = B.AgentNo 
AND A.Commission IS NULL, 
ORDER BY A.AgentName DESC 

Ich erhalte eine Fehlermeldung, die „Die Select-Anweisung besagt, enthält ein reserviertes Wort oder ein Argument Namen, der falsch geschrieben ist oder fehlt, oder die Interpunktion ist falsch . "

Ich bin mir nicht sicher, wo dieser Fehler auftritt, kann jemand bitte helfen?

+1

Das erste, was meine Aufmerksamkeit verfolgt, ist, dass Sie Ihre Tabelle Aliase, wie 'A' zitiert. Ist das in Access notwendig (keine Ahnung). Denn in SQL wird das nicht funktionieren. Haben Sie versucht, wenn es funktioniert, wenn Sie diese Anführungszeichen entfernen? – Kevin

+0

@Kevin Ich glaube nicht, dass es notwendig ist, aber es ist gültig in MS Access –

+0

Sie haben auch ein Komma nach Ihrem letzten Feld in der SELECT-Klausel, ... AS "Steuer bezahlt von Supervisor", FROM. Wieder in SQL ist das nicht korrekt. Ich sehe auch ein anderes Komma direkt vor Ihrer ORDER BY-Klausel. Vielleicht können Sie diese entfernen und es erneut versuchen. – Kevin

Antwort

2

Es gibt ein paar Probleme mit Ihrem SQL:

Es gibt Komma am Ende der SELECT (Entfernen des Kommas)

T.BasicTax) AS "Tax Paid By Supervisor" , 
FROM 

Es gibt ein Komma am Ende Ihrer FROM (entfernen das Komma)

AND A.Commission IS NULL, 
ORDER BY 

Ihre Aliase für die Tabellen nicht umgebrochen werden sollen (entfernen Sie die Apostrophe)

Für Feldnamen verwenden eckigen Klammern (Anführungszeichen entfernen, ersetzen mit '[' und ']')

AS "Tax Paid By Agent", 
AS [Tax Paid By Agent], 

behoben:

SELECT 
    A.AgentName AS AgentName, 
    (
     (A.Salary) * (
      SELECT 
       S.PlusPercentage 
      FROM 
       TaxBracket AS S 
      WHERE 
       A.Salary >= S.FromEarnings 
      AND A.Salary <= S.ToEarnings 
     ) + S.BasicTax 
    ) AS [Tax Paid By Agent], 
    B.AgentName AS [Supervisor], 
    (
     (B.Salary) * (
      SELECT 
       T.PlusPercentage 
      FROM 
       TaxBracket AS T 
      WHERE 
       A.Salary >= T.FromEarnings 
      AND A.Salary <= T.ToEarnings 
     ) + T.BasicTax 
    ) AS [Tax Paid By Supervisor] 
FROM 
    Agent AS A, 
    TaxBracket AS S, 
    Agent AS B, 
    TaxBracket AS T 
WHERE 
    A.Supervisor = B.AgentNo 
    AND A.Commission IS NULL 
ORDER BY 
    A.AgentName DESC 

Wenn Sie etwas ein wenig einfacher wollen, vielleicht versuche so etwas wie:

SELECT 
    a.AgentName, 
    a.Salary, 
    (SELECT a.Salary*([PlusPercentage])+t.BasicTax AS tax FROM TaxBracket AS t WHERE t.FromEarnings<=a.Salary AND t.ToEarnings>=a.Salary;) AS aTax, 
    s.AgentName AS Supervisor, 
    s.Salary, 
    (SELECT s.Salary*([PlusPercentage])+t.BasicTax AS tax FROM TaxBracket AS t WHERE t.FromEarnings<=s.Salary AND t.ToEarnings>=s.Salary;) AS sTax 
FROM Agent AS a LEFT JOIN Agent AS s ON a.Supervisor = s.AgentNo;