2016-03-22 15 views
1

Ich möchte das Jahr und dann das Ende der Woche und dann nach dem Jahr und dann die Woche Ende gruppieren. Das Problem mit diesem Code ist, dass es alles außer der Sortierung tut.SQL Datum Formatierung und Sortierung Ausgabe

SELECT datepart(YEAR, CONVERT(DATE, PH.CreatedOn)) Year, 
    Convert(varchar(2), Datepart(month, DATEADD(D, -1 * DATEPART(dw, PH.createdon) + 7, PH.createdon)), 101) + '/' + Convert(varchar(2), Datepart(Day, DATEADD(D, -1 * DATEPART(dw, PH.createdon) + 7, PH.createdon)), 101) [Week Processed], 
    COUNT(PH.new_purchasehistoryid) AS 'Registrations' 
FROM new_purchasehistory PH 
GROUP BY DATEPART(YEAR, CONVERT(DATE, PH.createdon)), Convert(varchar(2), Datepart(month, DATEADD(D, -1 * DATEPART(dw, PH.createdon) + 7, PH.createdon)), 101) + '/' + Convert(varchar(2), Datepart(Day, DATEADD(D, -1 * DATEPART(dw, PH.createdon) + 7, PH.createdon)), 101) 

ORDER BY DATEPART(YEAR, CONVERT(DATE, PH.createdon)) DESC, Convert(varchar(2), Datepart(month, DATEADD(D, -1 * DATEPART(dw, PH.createdon) + 7, PH.createdon)), 101) + '/' + Convert(varchar(2), Datepart(Day, DATEADD(D, -1 * DATEPART(dw, PH.createdon) + 7, PH.createdon)), 101) desc 

Hier ist das Ergebnis. Ich denke, ich brauche eine andere Ziffer. Gibt es einen einfacheren Weg?

Year Week Processed Registrations 
2016 2/6  5935 
2016 2/27 4288 
2016 2/20 4205 
2016 2/13 3177 
2016 1/9 10422 
2016 1/30 3834 
2016 1/23 3411 
2016 1/16 2718 
2015 9/5  8560 
2015 9/19 6245 
2015 9/12 7427 
2015 8/8  6489 
2015 8/29 6558 

Antwort

0

Sie können das Leben mit Unterauswahl erleichtern. Wenn die Spalten, nach denen Sie sortieren, in der Auswahl enthalten sein müssen, benötigen Sie eine weitere Unterauswahl.

SELECT 
    T.year, 
    Convert(varchar(2), T.month, 101) + '/' + Convert(varchar(2), T.day, 101) Week, 
    COUNT(*) Registrations 
FROM (
    SELECT 
     datepart(YEAR, CONVERT(DATE, PH.CreatedOn)) Year, 
     Datepart(month, DATEADD(D, -1 * DATEPART(dw, PH.createdon) + 7, PH.createdon)) Month, 
     Datepart(Day, DATEADD(D, -1 * DATEPART(dw, PH.createdon) + 7, PH.createdon)) Day 
    FROM new_purchasehistory PH 
) T 
GROUP BY T.Year, T.month, T.day 
ORDER BY T.Year DESC, T.Month DESC, T.Day DESC