首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求SQL语句,该功能如何写

2013-12-04 
求SQL语句,该功能怎么写数据库有张表名为生产订单计划数据内容大概如下:客户编码(关键字)铸件号进度1

求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;


是不是这个意思???

热点排行