表T中现有如下数据:
workProc productName departNm amount
裁剪 半袖 裁剪车间 1340
缝纫 半袖 织造车间一部 100
包装 半袖 织造车间二部 100
裁剪 衬衫 裁剪车间 1000
缝纫 衬衫 织造车间三部 150
包装 衬衫 织造车间一部 100
裁剪 裤子 裁剪车间 800
缝纫 裤子 织造车间三部 200
包装 裤子 织造车间四部 120注:其中workProc列中的已经固定为裁剪、缝纫、包装这三项,其他列都是可变的。现要得到如下结果,还请高手指教。谢谢!productName workProc 裁剪车间 织造车间一部 织造车间二部 织造车间三部 织造车间四部 合计
半袖 裁剪 1340 1340
半袖 缝纫 100 100
半袖 包装 100 100
衬衫 裁剪 1000 1000
衬衫 缝纫 150 150
衬衫 包装 100 100
裤子 裁剪 800 800
裤子 缝纫 150 150
裤子 包装 120 120
合计 裁剪 3140 3140
合计 缝纫 100 300 400
合计 包装 100 120 220表格做的不好,还请见谅。我用行变列把departNm列横向了,但是,下面的合计不会了,请指教
workProc productName departNm amount
裁剪 半袖 裁剪车间 1340
缝纫 半袖 织造车间一部 100
包装 半袖 织造车间二部 100
裁剪 衬衫 裁剪车间 1000
缝纫 衬衫 织造车间三部 150
包装 衬衫 织造车间一部 100
裁剪 裤子 裁剪车间 800
缝纫 裤子 织造车间三部 200
包装 裤子 织造车间四部 120注:其中workProc列中的已经固定为裁剪、缝纫、包装这三项,其他列都是可变的。现要得到如下结果,还请高手指教。谢谢!productName workProc 裁剪车间 织造车间一部 织造车间二部 织造车间三部 织造车间四部 合计
半袖 裁剪 1340 1340
半袖 缝纫 100 100
半袖 包装 100 100
衬衫 裁剪 1000 1000
衬衫 缝纫 150 150
衬衫 包装 100 100
裤子 裁剪 800 800
裤子 缝纫 150 150
裤子 包装 120 120
合计 裁剪 3140 3140
合计 缝纫 100 300 400
合计 包装 100 120 220表格做的不好,还请见谅。我用行变列把departNm列横向了,但是,下面的合计不会了,请指教
insert into tb values('裁剪', '半袖', '裁剪车间' ,1340)
insert into tb values('缝纫', '半袖', '织造车间一部', 100)
insert into tb values('包装', '半袖', '织造车间二部' ,100)
insert into tb values('裁剪', '衬衫', '裁剪车间' ,1000)
insert into tb values('缝纫', '衬衫', '织造车间三部', 150)
insert into tb values('包装', '衬衫', '织造车间一部', 100)
insert into tb values('裁剪', '裤子', '裁剪车间' ,800)
insert into tb values('缝纫', '裤子', '织造车间三部', 200)
insert into tb values('包装', '裤子', '织造车间四部' ,120)
godeclare @sql varchar(8000)
set @sql = 'select isnull(workProc,''合计'') workProc, isnull(productName,''合计'') productName'
select @sql = @sql + ' , max(case departNm when ''' + departNm + ''' then amount else 0 end) [' + departNm + ']'
from (select distinct departNm from tb) as a
set @sql = @sql + ',sum(amount) 合计 from tb group by workProc , productName with rollup'
exec(@sql)
/*
workProc productName 裁剪车间 织造车间二部 织造车间三部 织造车间四部 织造车间一部 合计
-------------------- -------------------- ----------- ----------- ----------- ----------- ----------- -----------
包装 半袖 0 100 0 0 0 100
包装 衬衫 0 0 0 0 100 100
包装 裤子 0 0 0 120 0 120
包装 合计 0 100 0 120 100 320
裁剪 半袖 1340 0 0 0 0 1340
裁剪 衬衫 1000 0 0 0 0 1000
裁剪 裤子 800 0 0 0 0 800
裁剪 合计 1340 0 0 0 0 3140
缝纫 半袖 0 0 0 0 100 100
缝纫 衬衫 0 0 150 0 0 150
缝纫 裤子 0 0 200 0 0 200
缝纫 合计 0 0 200 0 100 450
合计 合计 1340 100 200 120 100 3910
*/
set @sql = 'select isnull(productName,''合计'') productName , isnull(workProc,''合计'') workProc '
select @sql = @sql + ' , max(case departNm when ''' + departNm + ''' then amount else 0 end) [' + departNm + ']'
from (select distinct departNm from tb) as a
set @sql = @sql + ',sum(amount) 合计 from tb group by productName , workProc with rollup'
exec(@sql)
/*
productName workProc 裁剪车间 织造车间二部 织造车间三部 织造车间四部 织造车间一部 合计
-------------------- -------------------- ----------- ----------- ----------- ----------- ----------- -----------
半袖 包装 0 100 0 0 0 100
半袖 裁剪 1340 0 0 0 0 1340
半袖 缝纫 0 0 0 0 100 100
半袖 合计 1340 100 0 0 100 1540
衬衫 包装 0 0 0 0 100 100
衬衫 裁剪 1000 0 0 0 0 1000
衬衫 缝纫 0 0 150 0 0 150
衬衫 合计 1000 0 150 0 100 1250
裤子 包装 0 0 0 120 0 120
裤子 裁剪 800 0 0 0 0 800
裤子 缝纫 0 0 200 0 0 200
裤子 合计 800 0 200 120 0 1120
合计 合计 1340 100 200 120 100 3910
*/drop table tb