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

统计报表有关问题

2012-03-11 
统计报表问题数据库-生产表产品名称工序名称产品数量产品1工序110产品2工序120产品3工序130产品1工序240产

统计报表问题
数据库-生产表  
 
产品名称     工序名称       产品数量
产品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

热点排行