2017-03-11 3 views
0

nur versucht, zu einer Gruppe ausgewählten Datensätze von zwei SäulenSQL Gruppe von zwei colums

SELECT FSB_ProcessItems.InvId, 
     FSB_ProcessItems.ItemId, 
     FSB_Processes.Code, 
     Sum(FSB_ProcessItems.Qty), 
     FSB_Processes.Date 

FROM FSB_ProcessItems 
    INNER JOIN FSB_ProcessStudents ON FSB_ProcessItems.ProStudentId = FSB_ProcessStudents.ProStudentId 
    INNER JOIN FSB_Processes ON FSB_Processes.ProcessId = FSB_ProcessStudents.ProcessId 


GROUP BY FSB_ProcessItems.InvId, FSB_ProcessItems.ItemId 

Bu habe ich die Fehler:

Spalte ‚‘ in der Auswahlliste ungültig ist, weil sie nicht enthalten sind entweder in einer Aggregatfunktion oder in der GROUP BY-Klausel.

auf FSB_Processes.Code und FSB_Processes.Date

Befor zu Gruppe, die versucht die Datensätze korrekt ausgewählt werden, so dass ich habe nur ein Problem mit

Gruppierung

für Lösung gesucht, aber viel Glück nicht, da ich verstehe nicht das Problem

so bin ich auf der Suche nach einer Erklärung und Lösung pls.

Antwort

1

Sie benötigen haben dont zu entscheiden, was Sie wollen. Wie schon geschrieben, sollten Sie die Code und die Date aus dem SELECT nehmen:

SELECT pi.InvId, pi.ItemId, Sum(pi.Qty) 
     -- p.Code, p.Date 
FROM FSB_ProcessItems pi INNER JOIN 
    FSB_ProcessStudents s 
    ON pi.ProStudentId = s.ProStudentId INNER JOIN 
    FSB_Processes p 
    ON p.ProcessId = s.ProcessId 
GROUP BY pi.InvId, pi.ItemId; 

Wenn Sie eine separate Zeile für Codes und/oder Daten wollen, schließen themin dann die GROUP BY.

+0

Wenn wir Fensterfunktionen, d. H. Sum() verwenden, kann OP zu diesem Zeitpunkt Code und Datum in der Select-Anweisung enthalten. Hab ich recht? – RGS

+0

@ RGS. . . Wenn Sie die GROUP BY entfernt haben. –

1

Sie müssen durch Klausel alle ausgewählten Spalten in der Gruppe stellen, die eine Aggregatfunktion

SELECT FSB_ProcessItems.InvId, 
    FSB_ProcessItems.ItemId, 
    FSB_Processes.Code, 
    Sum(FSB_ProcessItems.Qty), 
    FSB_Processes.Date 

FROM FSB_ProcessItems 
INNER JOIN FSB_ProcessStudents ON FSB_ProcessItems.ProStudentId = FSB_ProcessStudents.ProStudentId 
INNER JOIN FSB_Processes ON FSB_Processes.ProcessId = FSB_ProcessStudents.ProcessId 

GROUP BY FSB_ProcessItems.InvId, FSB_ProcessItems.ItemId, FSB_Processes.Date, FSB_Processes.Code