CREATE TABLE [dbo].[WeekCalender](
[Id] [int] IDENTITY(1,1) NOT NULL,
[YearNum] smallint ,--几几年
[MonthInt] smallint,--几月份
[WeekInt] smallint,--第几周
[WeekStartDay] DateTime,--周开始日
[WeekEndDay] DateTime--周结束日
) ON [PRIMARY]
insert into [WeekCalender]([YearNum] ,[MonthInt] , [DayNum], [WeekInt],[WeekStartDay] , [WeekEndDay])values(14,10,23,1,'2014-09-26','2014-09-28')
insert into [WeekCalender]([YearNum] ,[MonthInt] , [DayNum], [WeekInt],[WeekStartDay] , [WeekEndDay])values(14,10,23,2,'2014-09-29','2014-10-04')
insert into [WeekCalender]([YearNum] ,[MonthInt] , [DayNum], [WeekInt],[WeekStartDay] , [WeekEndDay])values(14,10,23,3,'2014-10-05','2014-10-11')
insert into [WeekCalender]([YearNum] ,[MonthInt] , [DayNum], [WeekInt],[WeekStartDay] , [WeekEndDay])values(14,10,23,4,'2014-10-12','2014-10-18')
insert into [WeekCalender]([YearNum] ,[MonthInt] , [DayNum], [WeekInt],[WeekStartDay] , [WeekEndDay])values(14,10,23,5,'2014-10-19','2014-10-25')
--每个月的几个周,每个周的开始日和结束日,我自己先在表里面维护好,因为水平有限,暂时这样做。就算做整年的,也用不了多少时间。
CREATE TABLE [dbo].[tempTable](
[大类] [int] ,
[小类] smallint ,
[入库日期] DateTime,--DAY
[入库数量] int--入库数量
) ON [PRIMARY]
insert into [tempTable]([大类],[小类],[入库日期],[入库数量])values( 0,598,'2014-09-26',100 )
insert into [tempTable]([大类],[小类],[入库日期],[入库数量])values( 0,598,'2014-09-27',200 )
insert into [tempTable]([大类],[小类],[入库日期],[入库数量])values( 0,599,'2014-10-06',300 )
insert into [tempTable]([大类],[小类],[入库日期],[入库数量])values( 0,599,'2014-10-16',400 )
insert into [tempTable]([大类],[小类],[入库日期],[入库数量])values( 0,600,'2014-10-16',500 )
insert into [tempTable]([大类],[小类],[入库日期],[入库数量])values( 1,601,'2014-10-16',600 )
insert into [tempTable]([大类],[小类],[入库日期],[入库数量])values( 1,601,'2014-10-09',700 )
insert into [tempTable]([大类],[小类],[入库日期],[入库数量])values( 1,605,'2014-10-11',800 )
insert into [tempTable]([大类],[小类],[入库日期],[入库数量])values( 1,606,'2014-10-12',900 )
insert into [tempTable]([大类],[小类],[入库日期],[入库数量])values( 1,605,'2014-10-21',50 )
insert into [tempTable]([大类],[小类],[入库日期],[入库数量])values( 1,606,'2014-10-22',200 )
insert into [tempTable]([大类],[小类],[入库日期],[入库数量])values( 2,603,'2014-10-05',300 )
按入库日期匹配第几周,然后按照周汇总,
希望得到的数据是
大类,小类,第一周入库,第二周入库,第三周入库,第四周入库,第五周入库
谢谢
------解决思路----------------------
数据有问题。
select 大类,小类,isnull([1] ,0) as 第一周入库,ISNULL([2],0) as 第二周入库,
isnull([3],0) as 第三周入库,isnull([4],0) as 第四周入库,isnull([5],0)
as 第五周入库 from (select b.大类,b.小类,a.WeekInt,SUM(b.入库数量) as sums from weekcalender as a
join tempTable as b on b.入库日期 between a.WeekStartDay and a.WeekEndDay
grouP by b.大类,b.小类,a.WeekInt) as t
pivot(sum(sums) for weekint in([1],[2],[3],[4],[5])) as p
--结果
大类 小类 第一周入库 第二周入库 第三周入库 第四周入库 第五周入库
----------- ------ ----------- ----------- ----------- ----------- -----------
0 598 300 0 0 0 0
0 599 0 0 300 400 0
0 600 0 0 0 500 0
1 601 0 0 700 600 0
2 603 0 0 300 0 0
1 605 0 0 800 0 50