日期:2014-05-19  浏览次数:20395 次

统计报表问题
数据库-生产表  
 
产品名称     工序名称       产品数量
产品1           工序1             10
产品2           工序1             20
产品3           工序1             30
产品1           工序2             40
产品3           工序2             50
产品4           工序2             60
产品2           工序3             70
产品1           工序3             80
产品3           工序3             90
产品4           工序3             100
   
语言用ASP,     或者直接建立一个视图   包括以下几列
产品名称 -工序1 -工序2 -工序3 -工序4

如何得出以下的报表:
产品名称 -工序1 -工序2 -工序3 -工序4
产品1 -10 -  -90 - 
产品2 -20 -  -70 - 
产品3 -30 -40 -90 - 
产品4   -60 -  -100

------解决方案--------------------
create table t2(a varchar(50),b varchar(50),c int)
insert into t2 select '产品1 ', '工序1 ',10
insert into t2 select '产品2 ', '工序1 ',10
insert into t2 select '产品3 ', '工序1 ',10
insert into t2 select '产品1 ', '工序2 ',10
insert into t2 select '产品2 ', '工序2 ',10
insert into t2 select '产品3 ', '工序2 ',10
insert into t2 select '产品1 ', '工序3 ',10
insert into t2 select '产品2 ', '工序3 ',10
insert into t2 select '产品3 ', '工序3 ',10
insert into t2 select '产品1 ', '工序4 ',10
insert into t2 select '产品2 ', '工序4 ',10
insert into t2 select '产品3 ', '工序4 ',10
insert into t2 select '产品1 ', '工序1 ',10
insert into t2 select '产品4 ', '工序1 ',10


declare @sql varchar(1000)
set @sql= ' '
select @sql=@sql+ ',[ '+cast(e.b as varchar)+ ']=-sum(case when b= ' ' '+cast(e.b as varchar)+ ' ' ' then e.c else 0 end) '
from t2 e group by b
set @sql= 'select e.a '+@sql+ ' from t2 e group by e.a '
exec(@sql)


a 工序1 工序2 工序3 工序4
产品1 -20 -10 -10 -10
产品2 -10 -10 -10 -10
产品3 -10 -10 -10 -10
产品4 -10 0 0 0

------解决方案--------------------
---创建测试数据
Create Table 生产表(产品名称 Varchar(10),工序名称 Varchar(10),产品数量 int)
Insert 生产表 Select '产品1 ', '工序1 ', 10
Union All Select '产品2 ', '工序1 ', 20
Union All Select '产品3 ', '工序1 ', 30
Union All Select '产品1 ', '工序2 ', 40
Union All Select '产品3 ', '工序2 ', 50
Union All Select '产品4 ', '工序2 ', 60
Union All Select '产品2 ', '工序3 ', 70
Union All Select '产品1 ', '工序3 ', 80
Union All Select '产品3 ', '工序3 ', 90
Union All Select '产品4 ', '工序3 ', 100

Select * From 生产表
---查询结果
Declare @sql Varchar(8000)
Set @sql= ' '