2015-01-27 8 views
5

Mam następująco tabelę:Jak zamówić według daty w Sql Server GROUP BY sformatowana data?

Table: student_test_records 

Student TestDate     Result 
------- ------------------   ------- 
A   2015-01-26 17:28:11   Pass 
B   2015-01-24 17:28:11   Fail 
C   2015-01-26 17:28:11   Pass 
D   2015-01-26 17:28:11   Fail 
E   2014-05-23 17:28:11   Pass 
F   2013-06-23 17:28:11   Pass 
G   2014-05-23 17:28:11   Fail 

Ja próbuje napisać zapytanie w SQL Server, aby wyświetlić liczbę przeszedł/nie powiodła wyniki dziennie w następującym formacie:

FormattedDate   Result Count 
-----------   ------ ----- 
May-23-2013   Pass 1 
May-23-2014   Fail 1 
May-23-2014   Pass 1 
Jan-24-2015   Fail 1 
Jan-26-2015   Fail 1 
Jan-26-2015   Pass 2 

The Poniżej znajduje zapytania próbowałem:

SELECT FORMAT(TestDate, 'MMM-dd-yyyy') as FormattedDate, Result, Count 
FROM student_test_records 
GROUP BY FORMAT(TestDate, 'MMM-dd-yyyy'), Result 
order BY FORMAT(TestDate, 'MMM-dd-yyyy'); 

zestaw wynik jest prawidłowy, ale kolejność przychodzi sformatowany ciąg data (miesiąc-dzień-rok alfabetycznym sprzymierzyć). Jak mogę zamówić wynik w rzeczywistej dacie (TestDate)? W MySQL mogłem wykonać ORDER BY TestDate zamiast ostatniej linii w powyższym zapytaniu.

Odpowiedz

5

To powinno działać:

SELECT 
    FORMAT(cast(TestDate as date), 'MMM-dd-yyyy') as FormattedDate, 
    Result, 
    Count(*) as Count 
FROM student_test_records 
GROUP BY cast(TestDate as date), Result 
ORDER BY cast(TestDate as date); 
+0

Wow, to działa! Czy mógłbyś wyjaśnić, dlaczego obsada jest potrzebna? – devnull

+0

ponieważ trzeba usunąć znacznik czasu, sqlserver nie może rozpoznać tego formatu jako daty. Byłoby inaczej, gdybyś zamiast tego używał konwersji/rzutowania –

2

Dość dużo już tam z nim

SELECT FORMAT(TestDate, 'MMM-dd-yyyy') as FormattedDate, Result, Count(*) 
FROM student_test_records 
GROUP BY TestDate, Result 
ORDER BY TestDate; 
+0

próbowałem go. Muszę pogrupować według MMM-dd-rrrr, ponieważ muszę wyeliminować godziny, minuty, sekundy itd. Ale jeśli to powiem, nie mogę zamówić przez TestDate. Byłbym zmuszony zamówić przez sformatowaną datę, która zamawia jako ciąg zamiast daty. – devnull