22,209
社区成员
发帖
与我相关
我的任务
分享
(物料编码) (物料名称) (需求数量) (需求日期)
ITEM_CODE DES TO_BE_FLLW DATE_START
21-00001-00010 塑胶A 60 2010-09-07
21-00001-00010 塑胶A 40 2010-09-28
21-00001-00010 塑胶A 10 2010-10-14
21-00002-00030 塑胶C 50 2010-09-27
21-00002-00030 塑胶C 80 2010-09-28
21-00002-00030 塑胶C 40 2010-11-29
。。。。。。
ITEM_CODE DES 0wk 1wk 2wk 3wk 4wk ...... 11wk 12wk
21-00001-00010 塑胶A 60 0 40 0 10 ...... 0 0
21-00002-00030 塑胶C 0 0 130 0 0 ...... 40 0
举例:塑胶C 在2wk的130是2010-09-27日的50加上2010-09-28的 80而得
--> 测试数据:#
if object_id('tempdb.dbo.#') is not null drop table #
create table #(ITEM_CODE varchar(14), DES varchar(8), TO_BE_FLLW int, DATE_START datetime)
insert into #
select '21-00001-00010', '塑胶A', 60, '2010-09-07' union all
select '21-00001-00010', '塑胶A', 40, '2010-09-28' union all
select '21-00001-00010', '塑胶A', 10, '2010-10-14' union all
select '21-00002-00030', '塑胶C', 50, '2010-09-27' union all
select '21-00002-00030', '塑胶C', 80, '2010-09-28' union all
select '21-00002-00030', '塑胶C', 40, '2010-11-29'
declare @ datetime
-- 本周星期日0点
set @ = convert(varchar, (getdate() - (@@datefirst - 1 + datepart(weekday, getdate())) % 7), 112)
-- 支持跨年
select ITEM_CODE,DES,
sum(case when DATE_START < @ then TO_BE_FLLW else 0 end) '0wk',
sum(case datediff(day,@,DATE_START)/7 when 0 then TO_BE_FLLW else 0 end) '1wk',
sum(case datediff(day,@,DATE_START)/7 when 1 then TO_BE_FLLW else 0 end) '2wk',
sum(case datediff(day,@,DATE_START)/7 when 2 then TO_BE_FLLW else 0 end) '3wk',
sum(case datediff(day,@,DATE_START)/7 when 3 then TO_BE_FLLW else 0 end) '4wk',
sum(case datediff(day,@,DATE_START)/7 when 4 then TO_BE_FLLW else 0 end) '5wk',
sum(case datediff(day,@,DATE_START)/7 when 5 then TO_BE_FLLW else 0 end) '6wk',
sum(case datediff(day,@,DATE_START)/7 when 6 then TO_BE_FLLW else 0 end) '7wk',
sum(case datediff(day,@,DATE_START)/7 when 7 then TO_BE_FLLW else 0 end) '8wk',
sum(case datediff(day,@,DATE_START)/7 when 8 then TO_BE_FLLW else 0 end) '9wk',
sum(case datediff(day,@,DATE_START)/7 when 9 then TO_BE_FLLW else 0 end) '10wk',
sum(case datediff(day,@,DATE_START)/7 when 10 then TO_BE_FLLW else 0 end) '11wk',
sum(case datediff(day,@,DATE_START)/7 when 11 then TO_BE_FLLW else 0 end) '12wk'
from # group by ITEM_CODE,DES
/*
ITEM_CODE DES 0wk 1wk 2wk 3wk 4wk 5wk 6wk 7wk 8wk 9wk 10wk 11wk 12wk
-------------- -------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
21-00001-00010 塑胶A 60 0 40 0 10 0 0 0 0 0 0 0 0
21-00002-00030 塑胶C 0 0 130 0 0 0 0 0 0 0 0 40 0
*/
--> 测试数据:#
if object_id('tempdb.dbo.#') is not null drop table #
create table #(ITEM_CODE varchar(14), DES varchar(8), TO_BE_FLLW int, DATE_START datetime)
insert into #
select '21-00001-00010', '塑胶A', 60, '2010-09-07' union all
select '21-00001-00010', '塑胶A', 40, '2010-09-28' union all
select '21-00001-00010', '塑胶A', 10, '2010-10-14' union all
select '21-00002-00030', '塑胶C', 50, '2010-09-27' union all
select '21-00002-00030', '塑胶C', 80, '2010-09-28' union all
select '21-00002-00030', '塑胶C', 40, '2010-11-29'
declare @ datetime
-- 0周星期日的日期
set @ = getdate() - (@@datefirst - 1 + datepart(weekday, getdate())) % 7 - 7
-- 支持跨年
select ITEM_CODE,DES,
sum(case datediff(day,@,DATE_START)/7 when 0 then TO_BE_FLLW else 0 end) '0wk',
sum(case datediff(day,@,DATE_START)/7 when 1 then TO_BE_FLLW else 0 end) '1wk',
sum(case datediff(day,@,DATE_START)/7 when 2 then TO_BE_FLLW else 0 end) '2wk',
sum(case datediff(day,@,DATE_START)/7 when 3 then TO_BE_FLLW else 0 end) '3wk',
sum(case datediff(day,@,DATE_START)/7 when 4 then TO_BE_FLLW else 0 end) '4wk',
sum(case datediff(day,@,DATE_START)/7 when 5 then TO_BE_FLLW else 0 end) '5wk',
sum(case datediff(day,@,DATE_START)/7 when 6 then TO_BE_FLLW else 0 end) '6wk',
sum(case datediff(day,@,DATE_START)/7 when 7 then TO_BE_FLLW else 0 end) '7wk',
sum(case datediff(day,@,DATE_START)/7 when 8 then TO_BE_FLLW else 0 end) '8wk',
sum(case datediff(day,@,DATE_START)/7 when 9 then TO_BE_FLLW else 0 end) '9wk',
sum(case datediff(day,@,DATE_START)/7 when 10 then TO_BE_FLLW else 0 end) '10wk',
sum(case datediff(day,@,DATE_START)/7 when 11 then TO_BE_FLLW else 0 end) '11wk',
sum(case datediff(day,@,DATE_START)/7 when 12 then TO_BE_FLLW else 0 end) '12wk'
from # group by ITEM_CODE,DES
/*
ITEM_CODE DES 0wk 1wk 2wk 3wk 4wk 5wk 6wk 7wk 8wk 9wk 10wk 11wk 12wk
-------------- -------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
21-00001-00010 塑胶A 60 0 40 0 10 0 0 0 0 0 0 0 0
21-00002-00030 塑胶C 0 0 130 0 0 0 0 0 0 0 0 40 0
*/
declare @ta table (ITEM_CODE nvarchar(20),DES nvarchar(10),TO_BE_FLLW int,DATE_START datetime)
insert @ta
select '21-00001-00010','塑胶A',60,'2010-09-07' union all
select '21-00001-00010','塑胶A',40,'2010-09-28' union all
select '21-00001-00010','塑胶A',10,'2010-10-14' union all
select '21-00001-00030','塑胶C',50,'2010-09-27' union all
select '21-00001-00030','塑胶C',80,'2010-09-28' union all
select '21-00001-00030','塑胶C',40,'2010-11-29'
declare @t datetime
set @t = '2010-9-22' --假设今天为 2010-9-22
select ITEM_CODE,DES,
sum(case when datename(week,DATE_START) < datename(week,@t) then TO_BE_FLLW else 0 end) '0wk',
sum(case when datename(week,DATE_START) = datename(week,@t) then TO_BE_FLLW else 0 end) '1wk',
sum(case when datename(week,DATE_START)-1 = datename(week,@t) then TO_BE_FLLW else 0 end) '2wk',
sum(case when datename(week,DATE_START)-2 = datename(week,@t) then TO_BE_FLLW else 0 end) '3wk',
sum(case when datename(week,DATE_START)-3 = datename(week,@t) then TO_BE_FLLW else 0 end) '4wk',
sum(case when datename(week,DATE_START)-4 = datename(week,@t) then TO_BE_FLLW else 0 end) '5wk',
sum(case when datename(week,DATE_START)-5 = datename(week,@t) then TO_BE_FLLW else 0 end) '6wk',
sum(case when datename(week,DATE_START)-6 = datename(week,@t) then TO_BE_FLLW else 0 end) '7wk',
sum(case when datename(week,DATE_START)-7 = datename(week,@t) then TO_BE_FLLW else 0 end) '8wk',
sum(case when datename(week,DATE_START)-8 = datename(week,@t) then TO_BE_FLLW else 0 end) '9wk',
sum(case when datename(week,DATE_START)-9 = datename(week,@t) then TO_BE_FLLW else 0 end) '10wk',
sum(case when datename(week,DATE_START)-10 = datename(week,@t) then TO_BE_FLLW else 0 end) '11wk',
sum(case when datename(week,DATE_START)-11 = datename(week,@t) then TO_BE_FLLW else 0 end) '12wk'
from @ta group by ITEM_CODE,DES
/*
(所影响的行数为 6 行)
ITEM_CODE DES 0wk 1wk 2wk 3wk 4wk 5wk 6wk 7wk 8wk 9wk 10wk 11wk 12wk
-------------------- ---------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
21-00001-00010 塑胶A 60 0 40 0 10 0 0 0 0 0 0 0 0
21-00001-00030 塑胶C 0 0 130 0 0 0 0 0 0 0 0 40 0
(所影响的行数为 2 行)
和你数据一样了 呵呵
*/
declare @ta table (ITEM_CODE nvarchar(20),DES nvarchar(10),TO_BE_FLLW int,DATE_START datetime)
insert @ta
select '21-00001-00010','塑胶A',60,'2010-09-07' union all
select '21-00001-00010','塑胶A',40,'2010-09-28' union all
select '21-00001-00010','塑胶A',10,'2010-09-14' union all
select '21-00001-00030','塑胶C',50,'2010-09-27' union all
select '21-00001-00030','塑胶C',80,'2010-09-28' union all
select '21-00001-00030','塑胶C',40,'2010-11-29'
select ITEM_CODE,DES,
sum(case when datename(week,DATE_START) < datename(week,getdate()) then TO_BE_FLLW else 0 end) '0wk',
sum(case when datename(week,DATE_START) = datename(week,getdate()) then TO_BE_FLLW else 0 end) '1wk',
sum(case when datename(week,DATE_START)-1 = datename(week,getdate()) then TO_BE_FLLW else 0 end) '2wk',
sum(case when datename(week,DATE_START)-2 = datename(week,getdate()) then TO_BE_FLLW else 0 end) '3wk',
sum(case when datename(week,DATE_START)-3 = datename(week,getdate()) then TO_BE_FLLW else 0 end) '4wk',
sum(case when datename(week,DATE_START)-4 = datename(week,getdate()) then TO_BE_FLLW else 0 end) '5wk',
sum(case when datename(week,DATE_START)-5 = datename(week,getdate()) then TO_BE_FLLW else 0 end) '6wk',
sum(case when datename(week,DATE_START)-6 = datename(week,getdate()) then TO_BE_FLLW else 0 end) '7wk',
sum(case when datename(week,DATE_START)-7 = datename(week,getdate()) then TO_BE_FLLW else 0 end) '8wk',
sum(case when datename(week,DATE_START)-8 = datename(week,getdate()) then TO_BE_FLLW else 0 end) '9wk',
sum(case when datename(week,DATE_START)-9 = datename(week,getdate()) then TO_BE_FLLW else 0 end) '10wk',
sum(case when datename(week,DATE_START)-10 = datename(week,getdate()) then TO_BE_FLLW else 0 end) '11wk',
sum(case when datename(week,DATE_START)-11 = datename(week,getdate()) then TO_BE_FLLW else 0 end) '12wk'
from @ta group by ITEM_CODE,DES
/*
(所影响的行数为 6 行)
ITEM_CODE DES 0wk 1wk 2wk 3wk 4wk 5wk 6wk 7wk 8wk 9wk 10wk 11wk 12wk
-------------------- ---------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
21-00001-00010 塑胶A 70 0 40 0 0 0 0 0 0 0 0 0 0
21-00001-00030 塑胶C 0 0 130 0 0 0 0 0 0 0 0 40 0
(所影响的行数为 2 行)
*/