以下は、指定された日付の間の週数を表示するスクリプトです。カラムとして週を表示する
SET DATEFIRST 1
SELECT ta.account, ta.customer, SUM(amount), DATEPART(ww,ta.dt) WeekNumber
FROM tablename ta
WHERE dt >= '12/01/2011 00:00:00'
and dt < '12/29/2011 00:00:00'
GROUP BY ta.account, ta.customer, DATEPART(ww,ta.dt)
diffの週を結果に表示するにはどうすればよいですか?どんな提案も役に立ちます。
サンプルO /上記のためのPは次のとおりです。
Date Account Customer TotalSeconds Amount WeekNumber45 WeekNumber46 WeekNumber47 WeekNumber8 WeekNumber49
と、それに対応するデータ:
Date Account Customer TotalSeconds Amount WeekNumber
2011-11-01 xx0918252 198303792R 394 2.99 45
2011-11-08 xx1006979 200100567G 92 0.16 46
2011-11-15 xx1005385 A6863744I 492 1.275 47
2011-11-21 xx1012872 D7874694G 770 0.52 48
2011-11-28 xx1006419 C7112151H 1904 2.64 49
2011-11-28 xx1006420 G7378945A 77 0.3 49
私のようなO/Pを求めています。あなたは私の質問を理解したいと思っています。前もって感謝します。
こんにちはすべて、提案nアドバイスありがとうございます。最後に、私はしばらくの間、私が望んでいた結果を得ました。私はまだそれが難しいコーディングだと考えています。これにはより良い解決策がありますか?前もって感謝します。私のコードは次の通りです:
SELECT ta.account, ta.customer,
isnull(SUM(CASE WHEN DATEPART(ww,ta.dt) = '49' THEN amount END),0) AS "Week49",
isnull(SUM(CASE WHEN DATEPART(ww,ta.dt) = '50' THEN amount END),0) AS "Week50",
isnull(SUM(CASE WHEN DATEPART(ww,ta.dt) = '51' THEN amount END),0) AS "Week51",
isnull(SUM(CASE WHEN DATEPART(ww,ta.dt) = '52' THEN amount END),0) AS "Week52",
isnull(SUM(CASE WHEN DATEPART(ww,ta.dt) = '53' THEN amount END),0) AS "Week53",
FROM (
select * from tablename
where dt >= '12/01/2011 00:00:00' and dt <= '12/31/2011 00:00:00'
) ta
group by ta.account, ta.customer
ピボットの問題は、列の名前を事前に指定できる必要があることです。これは、sandysmithが問題の日付をハードコーディングしたい場合にのみ有効です。 –
@ジェラルド:そうですね。入力の日付が違うかもしれないし、週番号もあらかじめわかっていないので、それが私の望むものではない。 – sandysmith