当前位置: 代码迷 >> Sql Server >> 查询,多谢
  详细解决方案

查询,多谢

热度:56   发布时间:2016-04-24 09:52:43.0
求一个查询,谢谢
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
  相关解决方案