2016-03-22 5 views
1

年と週末を返し、年と週をグループ化してグループ化したいとします。このコードの問題は、ソート以外のすべてを実行することです。SQLの日付の書式設定と並べ替えの問題

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 

結果は次のとおりです。私は別の数字が必要だと思う。もっと簡単な方法はありますか?

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 

答えて

0

サブセレクトを使用すると、簡単に作業を進めることができます。あなたが注文した列が選択範囲内にある必要がある場合は、別のサブ選択が必要です。

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 
関連する問題