2017-05-02 3 views
0

Ich habe Schwierigkeiten, Tabellen zusammen mit SUM und GROUP BY-Funktion zu verbinden. Die Abfrage unten funktioniert:Joining Tabellen + SUMME & GROUP BY Funktion

select ID, sum(amount) 
from table1 
group by ID 
having sum(amount) between 1000 and 10000 

Als tabelle1 nur Kunden-ID enthält, muss ich auch Tabelle Kunden verbinden, die Kundennamen enthalten (Spalte NAME). Nach Abfrage wird für mich nicht mehr arbeiten:

select ID, name, sum(amount) 
from table1 
left join customers on table1.ID = customers.ID2 
group by ID 
having sum(amount) between 1000 and 10000 

Notwasserung SUM und GROUP BY Funktionalität nicht „reparieren“ das Problem als auch Spaltenname wird im Ergebnis zur Verfügung stehen, aber ich muss noch summieren und Gruppe der Betrag basiert auf ICH WÜRDE. Wie sollte ich in diesem Fall der anderen Tabelle beitreten, um auch das Feld NAME aus der Tabelle KUNDEN zu präsentieren?

Spaltenname oder ein Ausdruck in der SELECT-Liste nicht gültig‘

wird derzeit als Fehlermeldung ausgegeben.

+2

Die allgemeinen GROUP BY-Regel sagt: Wenn ein GROUP BY-Klausel angegeben ist, muss jede Spaltenreferenz in der SELECT-Liste entweder eine Gruppierungsspalte identifizieren oder das Argument einer Set-Funktion sein! – jarlh

+0

Fügen Sie einige Beispieltabellendaten und das erwartete Ergebnis hinzu! – jarlh

+0

Welches DBMS benutzen Sie? Postgres? Orakel? –

Antwort

0

Es muss in der group by sein:

select t1.ID, c.name, sum(t1.amount) 
from table1 t1 left join 
    customers c 
    on t1.ID = c.ID2 
group by t1.ID, c.name; 

Beachten Sie die Verwendung von Tabellen-Aliases.

0

Add "name" in der Gruppe durch Klausel

select table1.ID, customers.name, sum(table1.amount) amount 
from table1,customers on table1.ID = customers.ID2 
group by table1.ID,customers.name 
0

versucht es

select t.ID, c.name, sum(t.amount) 
from table1 t 
left join customers c on table1.ID = customers.ID2 
group by t.ID, c.name 
having sum(t.amount) between 1000 and 10000 

oder ohne auf Ihrer Anforderung hängt mit