私はあなたが3月と4月だけに関心があるわけではないと思っています。本当に必要なのは、毎月のロールアップです。 SQL Server 2005を使用しているので、dynamic PIVOT
でこれを行うことができます。次のコードがテストされ、毎月の合計を別の列に戻す必要があります。私はあなたがこれを何年もの価値のあるデータで実行している場合に備えて、年を追加しました。あなたは彼らがユニークで、カラムしたいグループと対応にするために注意を払う必要がありますが、あなたは、生成された日付文字列を変更することによって、列見出しを変更することができます。
CREATE TABLE ##Tab (date_from datetime, available int)
INSERT INTO ##Tab (date_from, available) VALUES ('3/1/2011', 5)
INSERT INTO ##Tab (date_from, available) VALUES('3/6/2011', 6)
INSERT INTO ##Tab (date_from, available) VALUES('3/25/2011', 7)
INSERT INTO ##Tab (date_from, available) VALUES('4/14/2011', 9)
INSERT INTO ##Tab (date_from, available) VALUES('4/20/2011', 10)
DECLARE @month_year varchar(2000)
SELECT @month_year = STUFF(
(SELECT DISTINCT '],[' + CAST(datepart(mm, date_from) AS varchar) +
'/' + CAST(datepart(yy, date_from) AS varchar)
FROM ##Tab
ORDER BY '],[' + CAST(datepart(mm, date_from) AS varchar) +
'/' + CAST(datepart(yy, date_from) AS varchar)
FOR XML PATH('')
), 1, 2, '') + ']'
DECLARE @dyn_pivot nvarchar(max)
SET @dyn_pivot =
N'
SELECT *
FROM
(
SELECT CAST(datepart(mm, date_from) AS varchar) + ''/'' + CAST(datepart(yy, date_from) AS varchar) dt, SUM(available) AS available
FROM ##Tab
GROUP BY CAST(datepart(mm, date_from) AS varchar) + ''/'' + CAST(datepart(yy, date_from) AS varchar)
) AS SourceTable
PIVOT
(
AVG(available)
FOR dt IN (' + @month_year + N')
) AS PivotTable
'
EXEC (@dyn_pivot)
あなたはたくさんより具体的に必要になるだろう。あなたは、あなたが作業していることを示すサンプルスキーマと、結果として望むものを示す結果セットを投稿できますか? – mwigdahl
私たちにいくつかのテーブル構造、サンプルデータ、これまで行ってきたクエリ、何がうまくいかないか(まだ)を説明し、いくつかのサンプル出力を見せてください。私たちは助けを始めることができます - 多分... –