2016-05-27 10 views
2

ich eine Abfrage zu schreiben, ich versuche, jeden Tag in meiner Datenbank zu zählen, wie Sie hier sehen können:GROUP BY Datum nicht Datetime in SQL Server

SELECT 
    [SubmitDateTime], 
    COUNT(*) 
FROM 
    [ParkingDB].[dbo].[Traffic] 
GROUP BY 
    submitdatetime 

Das Ergebnis ist:

enter image description here

Ich denke, SQL Server gruppiert mein Datum basierend auf Datum + Zeit und es ist mein Problem, aber in der Tat muss ich sie basierend auf dem Datum gruppieren. Ich verwende diese Art der Abfrage:

SELECT 
    [SubmitDateTime], 
    COUNT(*) 
FROM 
    [ParkingDB].[dbo].[Traffic] 
GROUP BY 
    CAST(myDateTime AS DATE) 

Aber es funktioniert nicht. Ich erhalte diese Fehlermeldung:

Msg 8120, Level 16, State 1, Line 3 Column
'ParkingDB.dbo.Traffic.SubmitDateTime' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

+0

Was meinst du damit nicht funktioniert? –

+0

@FelixPamittan bekomme ich diesen Fehler: Msg 8120, Ebene 16, Status 1, Zeile 3 Spalte 'ParkingDB.dbo.Traffic.SubmitDateTime' ist in der Auswahlliste ungültig, weil es weder in einer Aggregatfunktion noch in der GROUP BY enthalten ist Klausel. –

+0

Sie haben unten zwei funktionierende Antworten. Ich schlage vor, dass Sie eins als Antwort markiert haben, damit diese Frage gelöst wird. Danke –

Antwort

3

Sie müssen auch die Spalten in Ihrer SELECT Anweisung ändern:

SELECT 
    CAST([SubmitDateTime] AS DATE), 
    COUNT(*) 
FROM [ParkingDB].[dbo].[Traffic] 
GROUP BY 
    CAST([SubmitDateTime] AS DATE) 

Wenn GROUP BY Klausel verwenden, werden alle nicht aggregierten Spalten in der SELECT Anweisung muss erscheinen in die GROUP BY Klausel.

+0

Danke es funktioniert –

+0

Ich denke, ich bin ein wenig neu in SQL Server, weil ich meine Abfragen mit EF schreibe. –

3

Können Sie die Abfrage unten versuchen?

SELECT 
     CAST(myDateTime AS DATE) [SubmitDateTime], 
     COUNT(*) 
FROM [ParkingDB].[dbo].[Traffic] 
GROUP BY 
     CAST(myDateTime AS DATE)