select id,Year,M1=(select sum(b.M1) from 销售表 b where Year<=b.Year)...
select id,year,M1,M2=(M1+M2),M3=(M1+M2+M3)....... from 销售表这还烦琐?
可以使用集函数,另外select是对字段的投影操作,所以会有困难
--费事写得那么辛苦--生成处理语句 declare @s varchar(8000),@i int,@fd varchar(8000) select @s='',@fd='isnull(M1,0)',@i=2 while @i<=12 select @fd=@fd+'+isnull(M'+cast(@i as varchar)+',0)' ,@s=@s+',M'+cast(@i as varchar)+'=('+@fd+')' ,@i=@i+1 set @s=stuff(@s,1,1,'')--如果是更新 exec('update 表 set '+@s)--如果是直接查询 exec('select 商品ID,M1,'+@s+' from 表')
谢谢各位! 因为所有字段都是非NULL的,所以不必考虑NULL. 再问一下,如果有一个字段是商品种类,我要查询商品种类的累积销售量能否用以下SQL语句:select 商品种类,'年份'=year,'1月'=sum(M1),'2月'=sum(M1+M2),'3月'= sum(M1+M2+M3)....... from 销售表 group by 商品种类,year
declare @s varchar(8000),@i int,@fd varchar(8000)
select @s='',@fd='isnull(M1,0)',@i=2
while @i<=12
select @fd=@fd+'+isnull(M'+cast(@i as varchar)+',0)'
,@s=@s+',M'+cast(@i as varchar)+'=('+@fd+')'
,@i=@i+1
set @s=stuff(@s,1,1,'')--如果是更新
exec('update 表 set '+@s)--如果是直接查询
exec('select 商品ID,M1,'+@s+' from 表')
因为所有字段都是非NULL的,所以不必考虑NULL.
再问一下,如果有一个字段是商品种类,我要查询商品种类的累积销售量能否用以下SQL语句:select 商品种类,'年份'=year,'1月'=sum(M1),'2月'=sum(M1+M2),'3月'= sum(M1+M2+M3)....... from 销售表
group by 商品种类,year