求SQL语句,该功能怎么写
数据库有张表名为"生产订单计划";数据内容大概如下:
客户编码(关键字) 铸件号 进度1 进度2 进度3 进度4 进度5 进度6 ………………进度30 进度31
RFC010141 2402C-A 20 30 31 33 56 0 22 90
RFC010142 2802D-XX 40 0 37 56 44 5 43 70
RFC010154 3333Z-3E 50 9 45 50 40 50 143 170
………………
…………………………
KFC010159 5789X-3D 70 19 55 70 50 70 173 190
该表意思就是每个月初排的本月的生产订单计划从1日一直到31日;现在我需要实现的功能如下:假设今天是15日 我想查询每一行数据从进度1一直加到进度15的和;实现结果如下:AAA假设为每一行进度1一直到进度15的总和;
客户编码(关键字) 铸件号 当日累计 进度1 进度2 进度3 进度4 进度5 ………………进度30 进度31
RFC010141 2402C-A AAA 30 31 33 56 0 22 90
RFC010142 2802D-XX AAA 0 37 56 44 5 43 70
RFC010154 3333Z-3E AAA 9 45 50 40 50 143 170
………………
…………………………
KFC010159 5789X-3D AAA 19 55 70 50 70 173 190
[解决办法]
进度31的表结构太长,在此以5天的为例,供参考.
create table 生产订单计划
(客户编码 varchar(10),铸件号 varchar(10),进度1 int,进度2 int,进度3 int,进度4 int,进度5 int)
insert into 生产订单计划
select 'RFC010141','2402C-A',20,30,31,33,56 union all
select 'RFC010142','2802D-XX',4,10,11,12,44 union all
select 'RFC010154','3333Z-3E',5,19,45,50,60 union all
select 'KFC010159','5789X-3D',7,29,55,70,90
declare @curdate int
select @curdate=2; --> 假设今天是2日
with t as
(select 客户编码,铸件号,v,
row_number() over(partition by 客户编码,铸件号 order by c) 'rn'
from 生产订单计划 a
unpivot(v for c in([进度1],[进度2],[进度3],[进度4],[进度5])) u)
select 客户编码,铸件号,
(select sum(v) from t y
where y.客户编码=x.客户编码 and y.铸件号=x.铸件号 and y.rn<=@curdate) '当日累计',
进度1,进度2,进度3,进度4,进度5
from 生产订单计划 x
/*
客户编码 铸件号 当日累计 进度1 进度2 进度3 进度4 进度5
---------- ---------- ----------- ----------- ----------- ----------- ----------- -----------
RFC010141 2402C-A 50 20 30 31 33 56
RFC010142 2802D-XX 14 4 10 11 12 44
RFC010154 3333Z-3E 24 5 19 45 50 60
KFC010159 5789X-3D 36 7 29 55 70 90
(4 row(s) affected)
*/
create PROC proc_日累计
AS
begin
DECLARE @sql VARCHAR(100)
DECLARE @iday INT
SET @iday = DAY(GETDATE());
SET @sql = 'select * , (0'
SELECT @sql = @sql +'+[进度'+ CAST(@iday AS VARCHAR(2))+']'
FROM master..spt_values tb
WHERE tb.number BETWEEN 1 AND @iday AND tb.type ='P'
SET @sql = @sql +') as [当日累计] from 生产订单计划'
EXEC(@sql)
END;