2011-12-29 5 views
3

週をレポートに分割する必要があり、週は月曜日から日曜日です。たとえば、start_date01-12-2012end_date29-12-2011とします。今週は1st4をweek1、5th-11thをweek2、12th-18thをweek3、19th-25thをweek4、26th-29thをweek5に分割したいと思います。SQL Serverの指定された日付間で週ごとにレポートを作成

私は次のコードを試しましたが、正確な情報が得られませんでした。変更や提案は感謝します。前もって感謝します。

SELECT 
    ta.account, ta.customer, 

    isnull(sum(CASE WHEN (datepart(wk, ta.dt)- datepart(wk,dateadd(m, DATEDIFF(M, 0, ta.dt), 0))+ 1) = '1' 
THEN amount END),0) AS "1", 

    isnull(sum(CASE WHEN (datepart(wk, ta.dt)- datepart(wk,dateadd(m, DATEDIFF(M, 0, ta.dt), 0))+ 1)= '2' 
    AND (datepart(dw,ta.dt)= 1) 
    THEN amount END),0) AS "1", 

    isnull(sum(CASE WHEN (datepart(wk, ta.dt)- datepart(wk,dateadd(m, DATEDIFF(M, 0, ta.dt), 0))+ 1)= '2' 
    AND (datepart(dw,ta.dt)<> 1) 
    THEN amount END),0) AS "2", 

    isnull(sum(CASE WHEN (datepart(wk, ta.dt)- datepart(wk,dateadd(m, DATEDIFF(M, 0, ta.dt), 0))+ 1)= '3' 
    AND (datepart(dw,ta.dt) = 1)  
    THEN amount END),0) AS "2", 

    isnull(sum(CASE WHEN (datepart(wk, ta.dt)- datepart(wk,dateadd(m, DATEDIFF(M, 0, ta.dt), 0))+ 1)= '3' 
    AND (datepart(dw,ta.dt)<> 1)  
    THEN amount END),0) AS "3", 

    isnull(sum(CASE WHEN (datepart(wk, ta.dt)- datepart(wk,dateadd(m, DATEDIFF(M, 0, ta.dt), 0))+ 1) = '4' 
    AND (datepart(dw,ta.dt) = 1)   
    THEN amount END),0) AS "3", 

    isnull(sum(CASE WHEN (datepart(wk, ta.dt)- datepart(wk,dateadd(m, DATEDIFF(M, 0, ta.dt), 0))+ 1) = '4' 
AND (datepart(dw,ta.dt) <> 1) 
    THEN amount END),0) AS "4", 

    isnull(sum(CASE WHEN (datepart(wk, ta.dt)- datepart(wk,dateadd(m, DATEDIFF(M, 0, ta.dt), 0))+ 1) = '5' 
    AND (datepart(dw,ta.dt) = 1)  
    THEN amount END),0) AS "4", 

    isnull(sum(CASE WHEN (datepart(wk, ta.dt)- datepart(wk,dateadd(m, DATEDIFF(M, 0, ta.dt), 0))+ 1) = '5' 
    AND (datepart(dw,ta.dt) <> 1) 
    THEN amount END),0) AS "5" 

FROM 
    (SELECT * FROM tablename 
    WHERE dt >= '12/01/2011 00:00:00' AND dt < '12/26/2011 00:00:00' 
    ) ta 
GROUP BY 
    ta.account, ta.customer 

希望O/pは次のとおりです。

アカウントカスタマーWeek1 Week2 Week3 Week4 Week5

上記の日付については、 week1は、第一、第四 week2あるべき第五、第11回 する必要があります週2は12日から18日まで 週2は19日から25日まで 週2日は2012年1月26日から

毎週月曜日、月曜日から日曜日までの合計額を1週間としたい。

お客様には利用できない場合があります。だから、その場合、私は上記の例ではweek5のように0.00にしたいと思っています。

私の質問を理解していただきたいと思います。おかげ

答えて

1

は、指定した日付の特定の日付構成要素を表す整数を返しますDATEPARTこの

SET DATEFIRST 1  
SELECT tn.account, tn.customer, SUM(amount), DATEPART(ww,tn.dt) WeekNumber 
FROM tablename tn 
WHERE dt >= '12/01/2011 00:00:00' 
     and dt < '12/26/2011 00:00:00' 
GROUP BY ta.account, ta.customer, DATEPART(ww,tn.dt) 

を試してみてください。この場合、その年の週の数。

SET DATEFIRSTは、週の最初の曜日を1から7の数字に設定します。ここで、1は月曜日、2 - 火曜日などです。

+0

こんにちは、私はほとんど得ました。しかし、私は今年の週は印刷しません。私の週は月曜日から日曜日までです。今年の12月には、week1は1日目から4日目、week2は5日目から11日目などと言いましょう。最後に、week5は26〜31になるはずです。 – sandysmith

+0

@sandysmith申し訳ありませんが、私はあなたのコメントを非常に理解していませんでした。私の例では 'SUM'は週単位で計算され、第1週目は' dt> = '12/01/2011 00:00:00 'の行だけに 'amount'が取り込まれます。これらの週を列にしたいですか?あなたがあなたの質問に望ましい出力を提供していれば(あなたはそれを編集することができます)、それは素晴らしいことでしょう。 –

+0

私はちょうど私の質問を編集する。あなたが正しいです。私はo/pをweek1からweek5のようにしたい。 – sandysmith

関連する問題