参考までに。
create table table_meisai
(
meisai_id int,
hinmei_id varchar(10)
date datetime,
in_suryo int,
out_suryo int
);
insert into table_meisai values(1,'aaaaaa','2011/6/12',2000,1500);
insert into table_meisai values(2,'aaaaaa','2011/6/13',1000,1000);
insert into table_meisai values(3,'aaaaaa','2011/6/14',1300,2000);
insert into table_meisai values(4,'aaaaaa','2011/6/15',3300,2000);
insert into table_meisai values(5,'aaaaaa','2011/6/16',3200,3500);
insert into table_meisai values(6,'bbbbbb','2011/6/12',1000,2500);
insert into table_meisai values(7,'bbbbbb','2011/6/13',3000,4500);
明細行をCASE文で横展開して段々のデータに変換、
段々になっているのをキー項目で集計することで1行に集計する方法。
(1)各日付の曜日を求める。DATEPART(w, date)
(2)求めた曜日をCASE文で判定し、各曜日に振り分ける。
(3)集計する際、週をわけないとNGなので週数も求める。 DATEPART(ww, date)
(4)品名IDと週数をキーにして集計する。
各曜日の日付は週数をキーにしているので一意になるはずなので、maxを指定する。minでも可。単に集計関数を指定しないとエラーになるから指定しているだけです。
同じく、各週の入庫・出庫も集計関数を指定しないとエラーになるのでsumをかける。
以下は推測です。
※横の数を決める必要があるので土日も追加した。
※そもそも、週が異なる場合、2行にならないとおかしいので週数を追加した。
※6月12日は日曜日。
select
hinmei_id,
DATEPART(ww, date) as 週,
--
max(case when DATEPART(w, date) = 1 THEN date else null end ) as 日曜日,
sum(case when DATEPART(w, date) = 1 THEN in_suryo else null end ) as 日曜_入庫,
sum(case when DATEPART(w, date) = 1 THEN out_suryo else null end ) as 日曜_出庫,
--
max(case when DATEPART(w, date) = 2 THEN date else null end ) as 月曜日,
sum(case when DATEPART(w, date) = 2 THEN in_suryo else null end ) as 月曜_入庫,
sum(case when DATEPART(w, date) = 2 THEN out_suryo else null end ) as 月曜_出庫,
--
max(case when DATEPART(w, date) = 3 THEN date else null end ) as 火曜日,
sum(case when DATEPART(w, date) = 3 THEN in_suryo else null end ) as 火曜_入庫,
sum(case when DATEPART(w, date) = 3 THEN out_suryo else null end ) as 火曜_出庫,
--
max(case when DATEPART(w, date) = 4 THEN date else null end ) as 水曜日,
sum(case when DATEPART(w, date) = 4 THEN in_suryo else null end ) as 水曜_入庫,
sum(case when DATEPART(w, date) = 4 THEN out_suryo else null end ) as 水曜_出庫,
--
max(case when DATEPART(w, date) = 5 THEN date else null end ) as 木曜日,
sum(case when DATEPART(w, date) = 5 THEN in_suryo else null end ) as 木曜_入庫,
sum(case when DATEPART(w, date) = 5 THEN out_suryo else null end ) as 木曜_出庫,
--
max(case when DATEPART(w, date) = 6 THEN date else null end ) as 金曜日,
sum(case when DATEPART(w, date) = 6 THEN in_suryo else null end ) as 金曜_入庫,
sum(case when DATEPART(w, date) = 6 THEN out_suryo else null end ) as 金曜_出庫,
--
max(case when DATEPART(w, date) = 7 THEN date else null end ) as 土曜日,
sum(case when DATEPART(w, date) = 7 THEN in_suryo else null end ) as 土曜_入庫,
sum(case when DATEPART(w, date) = 7 THEN out_suryo else null end ) as 土曜_出庫
from table_meisai
group by hinmei_id,DATEPART(ww, date)
考え方は示したので参考にしてください。