统计报表问题
数据库-生产表
产品名称 工序名称 产品数量
产品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-10000
[解决办法]
---创建测试数据
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= ' '
Select @sql=@sql+ ',Max(Case 工序名称 When ' ' '+工序名称+ ' ' ' Then ' '- ' '+Cast(产品数量 As Varchar) Else ' '- ' ' End) As [- '+工序名称+ '] '
From 生产表 Group By 工序名称
Exec( 'Select 产品名称 '+@sql+ 'From 生产表 Group By 产品名称 ')
----你给出的数据工序名称没有工序4
/*
产品名称 -工序1 -工序2 -工序3
---------- ------------------------------- ------------------------------- ----------------
产品1 -10 -40 -80
产品2 -20 - -70
产品3 -30 -50 -90
产品4 - -60 -100