原帖:http://community.csdn.net/Expert/topic/4567/4567483.xml?temp=.4623834
解决方案 »
- 怎么看触发在哪里
- 会SQL的都来看看,在线等待,急用!
- 菜鸟求助两重排序查找数据信息的写法
- 如何将MSSQL数据库转成Oracle中的
- 哪位兄弟知道哪有数据库基础方面的电子书下载么?谢谢
- 求一帶行號的查詢語句,要求得以下結果:
- 求一个sql写法
- 求一個這樣的SQl 語句
- 如何实现快速的将DataTable插入到临时表
- to: nononono(null,null),紧接刚才的GRID的刷新问题!
- [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionCheckForData (CheckforData()).高分急求
- 我用Bulk Insert命令导入一个很大的文件,它的日期时间是yyyy-M-d h:mm:ss 格式为什么导不进去?怎样不该那个大文件也把数据导进去?
材料 规格 单位 类别 合计__产品 AA AB ...
产品规格 AA_ BB_ ...
产品产量 390.000000 5.000000 5.000000 ...
a NULL NULL 计划消耗 780.000000 10.000000 10.000000 ...
b NULL NULL 计划消耗 780.000000 10.000000 10.000000 ...
c NULL NULL 计划消耗 780.000000 10.000000 10.000000 ...
材料 规格 单位 类别 合计__产品 AA BB ...
产品规格 AA_ BB_ ...
产品产量 390.000000 5.000000 5.000000 ...
a NULL NULL 计划消耗 780.000000 10.000000 10.000000 ...
b NULL NULL 计划消耗 780.000000 10.000000 10.000000 ...
c NULL NULL 计划消耗 780.000000 10.000000 10.000000 ...
CREATE TABLE BOM单(产品 varchar(10),材料 varchar(10),消耗 decimal(28,6))
declare @i int
declare @J int
set @J = 0
set @i = 0
while @I < 4
begin
while @j < 26
begin
insert bom单 select char(65+@i)+char(65+@j),N'a',2
insert bom单 select char(65+@i)+char(65+@j),N'b',2
insert bom单 select char(65+@i)+char(65+@j),N'c',2
set @j = @J + 1
end
set @i = @i + 1
set @J = 0
end
go
CREATE TABLE 产品生产计划( 产品 varchar(10),产品规格 varchar(10),产量 decimal(28,6))
declare @ii int
declare @jj int
set @jj = 0
set @ii = 0
while @ii < 3
begin
while @jj < 26
begin
insert 产品生产计划 select char(65+@ii)+char(65+@jj),char(65+@ii)+char(65+@jj)+'_',5
set @jj = @jj + 1
end
set @ii = @ii + 1
set @jj = 0
end
goCREATE TABLE 产品生产物料采购计划( 产品 varchar(10),产品规格 varchar(10),产量 decimal(28,6),材料 varchar(60),规格 varchar(60),单位 varchar(4),消耗 decimal(28,6),计划消耗 decimal(28,6))
DECLARE @p产品 varchar(10)
DECLARE @p产品规格 varchar(10)
DECLARE @p产量 decimal(28,6)DECLARE cp_Cursor CURSOR FOR
select 产品,产品规格,产量 from 产品生产计划OPEN cp_Cursor
FETCH NEXT FROM cp_Cursor into @p产品,@p产品规格,@p产量WHILE @@FETCH_STATUS = 0
BEGIN
Insert Into 产品生产物料采购计划(产品,产品规格,产量,材料,消耗,计划消耗) select @p产品,@p产品规格,@p产量,bo.材料,bo.消耗,bo.消耗*@p产量 from bom单 bo where bo.产品=@p产品
FETCH NEXT FROM cp_Cursor into @p产品,@p产品规格,@p产量
END
CLOSE cp_Cursor
DEALLOCATE cp_Cursor
GOdeclare @sqlhead varchar(8000)
declare @sqlend varchar(8000)
declare @sql1 varchar(8000)
declare @sql2 varchar(8000)
declare @sql3 varchar(8000)
declare @sql4 varchar(8000)declare @sqlhead_ varchar(8000)
declare @sqlend_ varchar(8000)
declare @sql1_ varchar(8000)
declare @sql2_ varchar(8000)
declare @sql3_ varchar(8000)
declare @sql4_ varchar(8000)declare @i int
declare @ic varchar(20)--生成数据处理临时表
select id=identity(int,0,1),gid=0 ,a=',['+产品 +']=sum(case 产品 when ''' +产品+''' then 计划消耗 else 0 end)'
,b=',['+产品 +']=sum(case 产品 when ''' +产品+''' then 产量 else 0 end)'
into # from(select distinct 产品 from 产品生产物料采购计划) a order by 产品select @i=max(len(a)) from #
print @i
set @i=7800/@iupdate # set gid=id/@i
select @i=max(gid) from #--生成数据处理语句
select @sqlhead=''' union all select 材料,产品规格, 单位, 类别=''''计划消耗'''',
sum(计划消耗) as 合计'''
select @sqlend=''' from 产品生产物料采购计划 group by 材料,产品规格,单位'''
select @sql1=''
select @sql2='select '
select @sql3=''
select @sql4=''select @sqlhead_='''select distinct 材料='''''''',规格='''''''', 单位='''''''', 类别=''''产品产量'''',
sum(产量) as 合计__产品'''
select @sqlend_=''' from 产品生产物料采购计划 group by 材料,规格,单位 '''
select @sql1_=''
select @sql2_='select '
select @sql3_=''
select @sql4_=''
print @i
while @i>=0
begin
select @ic=cast(@i as varchar),@i=@i-1
select @sql1='@'+@ic+' varchar(8000),'+@sql1
select @sql2=@sql2+'@'+@ic+'='''','
select @sql3='select @'+@ic+'=@'+@ic+'+a from # where gid='+@ic+char(13)+@sql3
select @sql4=@sql4+',@'+@ic select @sql1_='@_'+@ic+' varchar(8000),'+@sql1_
select @sql2_=@sql2_+'@_'+@ic+'='''','
select @sql3_='select @_'+@ic+'=@_'+@ic+'+b from # where gid='+@ic+char(13)+@sql3_
select @sql4_=@sql4_+',@_'+@ic
endselect @sql1='declare '+left(@sql1,len(@sql1)-1)+char(13)
select @sql2=left(@sql2,len(@sql2)-1)+char(13)
select @sql3=left(@sql3,len(@sql3)-1)
select @sql4=substring(@sql4,2,8000)select @sql1_='declare '+left(@sql1_,len(@sql1_)-1)+char(13)
select @sql2_=left(@sql2_,len(@sql2_)-1)+char(13)
select @sql3_=left(@sql3_,len(@sql3_)-1)
select @sql4_=substring(@sql4_,2,8000)
--执行
exec(
@sql1_+@sql2_+@sql3_+'
'
+@sql1+@sql2+@sql3+'
exec('+@sqlhead_+'+'+@sql4_+'+'+@sqlend_+'+'
+@sqlhead+'+'+@sql4+'+'+@sqlend+')'
)--删除临时表
drop table #
--*/
godrop TABLE BOM单
drop TABLE 产品生产计划
drop TABLE 产品生产物料采购计划
/*材料 规格 单位 类别 合计__产品 AA
------------- ---------- ---- -------- ---------------------- --------------------
产品产量 390.000000 5.000000
a AA_ NULL 计划消耗 10.000000 10.000000
a AB_ NULL 计划消耗 10.000000 .000000
a AC_ NULL 计划消耗 10.000000 .000000
a AD_ NULL 计划消耗 10.000000 .000000
.....
a CY_ NULL 计划消耗 10.000000 .000000
a CZ_ NULL 计划消耗 10.000000 .000000
b AA_ NULL 计划消耗 10.000000 10.000000
b AB_ NULL 计划消耗 10.000000 .000000
b AC_ NULL 计划消耗 10.000000 .000000
......
b CX_ NULL 计划消耗 10.000000 .000000
b CY_ NULL 计划消耗 10.000000 .000000
b CZ_ NULL 计划消耗 10.000000 .000000
c AA_ NULL 计划消耗 10.000000 10.000000
c AB_ NULL 计划消耗 10.000000 .000000
c AC_ NULL 计划消耗 10.000000 .000000
......
c CV_ NULL 计划消耗 10.000000 .000000
c CW_ NULL 计划消耗 10.000000 .000000
c CX_ NULL 计划消耗 10.000000 .000000
c CY_ NULL 计划消耗 10.000000 .000000
c CZ_ NULL 计划消耗 10.000000 .000000
*/
declare @sqlhead_ varchar(8000)
declare @sqlend_ varchar(8000)
declare @sql1_ varchar(8000)
declare @sql2_ varchar(8000)
declare @sql3_ varchar(8000)
declare @sql4_ varchar(8000
还要对应增加,......
CREATE TABLE BOM单(产品 varchar(10),材料 varchar(10),消耗 decimal(28,6))
declare @i int
declare @J int
set @J = 0
set @i = 0
while @I < 4
begin
while @j < 26
begin
insert bom单 select char(65+@i)+char(65+@j),N'a',2
insert bom单 select char(65+@i)+char(65+@j),N'b',2
insert bom单 select char(65+@i)+char(65+@j),N'c',2
set @j = @J + 1
end
set @i = @i + 1
set @J = 0
end
go
CREATE TABLE 产品生产计划( 产品 varchar(10),产品规格 varchar(10),产量 decimal(28,6))
declare @ii int
declare @jj int
set @jj = 0
set @ii = 0
while @ii < 3
begin
while @jj < 26
begin
insert 产品生产计划 select char(65+@ii)+char(65+@jj),char(65+@ii)+char(65+@jj)+'_',5
set @jj = @jj + 1
end
set @ii = @ii + 1
set @jj = 0
end
goCREATE TABLE 产品生产物料采购计划( 产品 varchar(10),产品规格 varchar(10),产量 decimal(28,6),材料 varchar(60),规格 varchar(60),单位 varchar(4),消耗 decimal(28,6),计划消耗 decimal(28,6))
DECLARE @p产品 varchar(10)
DECLARE @p产品规格 varchar(10)
DECLARE @p产量 decimal(28,6)DECLARE cp_Cursor CURSOR FOR
select 产品,产品规格,产量 from 产品生产计划OPEN cp_Cursor
FETCH NEXT FROM cp_Cursor into @p产品,@p产品规格,@p产量WHILE @@FETCH_STATUS = 0
BEGIN
Insert Into 产品生产物料采购计划(产品,产品规格,产量,材料,消耗,计划消耗) select @p产品,@p产品规格,@p产量,bo.材料,bo.消耗,bo.消耗*@p产量 from bom单 bo where bo.产品=@p产品
FETCH NEXT FROM cp_Cursor into @p产品,@p产品规格,@p产量
END
CLOSE cp_Cursor
DEALLOCATE cp_Cursor
GOdeclare @sqlhead varchar(8000)
declare @sqlend varchar(8000)
declare @sql1 varchar(8000)
declare @sql2 varchar(8000)
declare @sql3 varchar(8000)
declare @sql4 varchar(8000)declare @sqlhead_ varchar(8000)
declare @sqlend_ varchar(8000)
declare @sql1_ varchar(8000)
declare @sql2_ varchar(8000)
declare @sql3_ varchar(8000)
declare @sql4_ varchar(8000)declare @sqlhead_1 varchar(8000)
declare @sqlend_1 varchar(8000)
declare @sql1_1 varchar(8000)
declare @sql2_1 varchar(8000)
declare @sql3_1 varchar(8000)
declare @sql4_1 varchar(8000)declare @i int
declare @ic varchar(20)--生成数据处理临时表
select id=identity(int,0,1),gid=0 ,a=',['+产品 +']=convert(varchar(10),sum(case 产品 when ''' +产品+''' then 计划消耗 else 0 end))'
,b=',['+产品 +']=convert(varchar(10),sum(case 产品 when ''' +产品+''' then 产量 else 0 end))',c=','''+产品规格+''''
into # from(select distinct 产品,产品规格 from 产品生产物料采购计划) a order by 产品select @i=max(len(a)) from #
print @i
set @i=7800/@iupdate # set gid=id/@i
select @i=max(gid) from #--生成数据处理语句
select @sqlhead=''' union all select 材料,规格, 单位, 类别=''''计划消耗'''',
convert(varchar(10),sum(计划消耗)) as 合计'''
select @sqlend=''' from 产品生产物料采购计划 group by 材料,规格,单位'''
select @sql1=''
select @sql2='select '
select @sql3=''
select @sql4=''select @sqlhead_=''' union all select distinct 材料='''''''',规格='''''''', 单位='''''''', 类别=''''产品产量'''',
convert(varchar(10),sum(产量)) as 合计__产品'''
select @sqlend_=''' from 产品生产物料采购计划 group by 材料,规格,单位 '''
select @sql1_=''
select @sql2_='select '
select @sql3_=''
select @sql4_=''select @sqlhead_1='''select distinct 材料='''''''',规格='''''''', 单位='''''''', 类别=''''产品规格'''',
'''''''' as 合计__产品'''
select @sqlend_1=''' from 产品生产物料采购计划 group by 材料,规格,单位 '''
select @sql1_1=''
select @sql2_1='select '
select @sql3_1=''
select @sql4_1=''print @i
while @i>=0
begin
select @ic=cast(@i as varchar),@i=@i-1
select @sql1='@'+@ic+' varchar(8000),'+@sql1
select @sql2=@sql2+'@'+@ic+'='''','
select @sql3='select @'+@ic+'=@'+@ic+'+a from # where gid='+@ic+char(13)+@sql3
select @sql4=@sql4+',@'+@ic select @sql1_='@_'+@ic+' varchar(8000),'+@sql1_
select @sql2_=@sql2_+'@_'+@ic+'='''','
select @sql3_='select @_'+@ic+'=@_'+@ic+'+b from # where gid='+@ic+char(13)+@sql3_
select @sql4_=@sql4_+',@_'+@ic
select @sql1_1='@_'+@ic+'1 varchar(8000),'+@sql1_1
select @sql2_1=@sql2_1+'@_'+@ic+'1='''','
select @sql3_1='select @_'+@ic+'1=@_'+@ic+'1 + c from # where gid='+@ic+char(13)+@sql3_1
select @sql4_1=@sql4_1+',@_'+@ic+'1 '
endselect @sql1='declare '+left(@sql1,len(@sql1)-1)+char(13)
select @sql2=left(@sql2,len(@sql2)-1)+char(13)
select @sql3=left(@sql3,len(@sql3)-1)
select @sql4=substring(@sql4,2,8000)select @sql1_='declare '+left(@sql1_,len(@sql1_)-1)+char(13)
select @sql2_=left(@sql2_,len(@sql2_)-1)+char(13)
select @sql3_=left(@sql3_,len(@sql3_)-1)
select @sql4_=substring(@sql4_,2,8000)select @sql1_1='declare '+left(@sql1_1,len(@sql1_1)-1)+char(13)
select @sql2_1=left(@sql2_1,len(@sql2_1)-1)+char(13)
select @sql3_1=left(@sql3_1,len(@sql3_1)-1)
select @sql4_1=substring(@sql4_1,2,8000)
--执行
exec(
@sql1_+@sql2_+@sql3_+'
'
+@sql1+@sql2+@sql3+'
'
+@sql1_1+@sql2_1+@sql3_1+'
exec('+@sqlhead_1+'+'+@sql4_1+'+'+@sqlend_1+'+'
+ @sqlhead_+'+'+@sql4_+'+'+@sqlend_+ ' + '
+@sqlhead+'+'+@sql4+'+'+@sqlend + ')'
)--删除临时表
drop table #
--*/
godrop TABLE BOM单
drop TABLE 产品生产计划
drop TABLE 产品生产物料采购计划
CREATE TABLE BOM单(产品 varchar(10),材料 varchar(10),消耗 decimal(28,6))
declare @i int
declare @J int
set @J = 0
set @i = 0
while @I < 4
begin
while @j < 26
begin
insert bom单 select char(65+@i)+char(65+@j),N'a',2
insert bom单 select char(65+@i)+char(65+@j),N'b',2
insert bom单 select char(65+@i)+char(65+@j),N'c',2
set @j = @J + 1
end
set @i = @i + 1
set @J = 0
end
go
CREATE TABLE 产品生产计划( 产品 varchar(10),产品规格 varchar(10),产量 decimal(28,6))
declare @ii int
declare @jj int
set @jj = 0
set @ii = 0
while @ii < 3
begin
while @jj < 26
begin
insert 产品生产计划 select char(65+@ii)+char(65+@jj),char(65+@ii)+char(65+@jj)+'_',5
set @jj = @jj + 1
end
set @ii = @ii + 1
set @jj = 0
end
goCREATE TABLE 产品生产物料采购计划( 产品 varchar(10),产品规格 varchar(10),产量 decimal(28,6),材料 varchar(60),规格 varchar(60),单位 varchar(4),消耗 decimal(28,6),计划消耗 decimal(28,6))
DECLARE @p产品 varchar(10)
DECLARE @p产品规格 varchar(10)
DECLARE @p产量 decimal(28,6)DECLARE cp_Cursor CURSOR FOR
select 产品,产品规格,产量 from 产品生产计划OPEN cp_Cursor
FETCH NEXT FROM cp_Cursor into @p产品,@p产品规格,@p产量WHILE @@FETCH_STATUS = 0
BEGIN
Insert Into 产品生产物料采购计划(产品,产品规格,产量,材料,消耗,计划消耗) select @p产品,@p产品规格,@p产量,bo.材料,bo.消耗,bo.消耗*@p产量 from bom单 bo where bo.产品=@p产品
FETCH NEXT FROM cp_Cursor into @p产品,@p产品规格,@p产量
END
CLOSE cp_Cursor
DEALLOCATE cp_Cursor
GOdeclare @sqlhead varchar(8000)
declare @sqlend varchar(8000)
declare @sql1 varchar(8000)
declare @sql2 varchar(8000)
declare @sql3 varchar(8000)
declare @sql4 varchar(8000)declare @sqlhead_ varchar(8000)
declare @sqlend_ varchar(8000)
declare @sql1_ varchar(8000)
declare @sql2_ varchar(8000)
declare @sql3_ varchar(8000)
declare @sql4_ varchar(8000)declare @sqlhead_1 varchar(8000)
declare @sqlend_1 varchar(8000)
declare @sql1_1 varchar(8000)
declare @sql2_1 varchar(8000)
declare @sql3_1 varchar(8000)
declare @sql4_1 varchar(8000)declare @i int
declare @ic varchar(20)--生成数据处理临时表
select id=identity(int,0,1),gid=0 ,a=',['+产品 +']=convert(varchar(10),sum(case 产品 when ''' +产品+''' then 计划消耗 else 0 end))'
,b=',['+产品 +']=convert(varchar(10),sum(case 产品 when ''' +产品+''' then 产量 else 0 end))',c=',['+产品 +']='''+产品规格+''''
into # from(select distinct 产品,产品规格 from 产品生产物料采购计划) a order by 产品select @i=max(len(a)) from #
print @i
set @i=7800/@iupdate # set gid=id/@i
select @i=max(gid) from #--生成数据处理语句
select @sqlhead=''' union all select 材料,规格, 单位, 类别=''''计划消耗'''',
convert(varchar(10),sum(计划消耗)) as 合计'''
select @sqlend=''' from 产品生产物料采购计划 group by 材料,规格,单位'''
select @sql1=''
select @sql2='select '
select @sql3=''
select @sql4=''select @sqlhead_=''' union all select distinct 材料='''''''',规格='''''''', 单位='''''''', 类别=''''产品产量'''',
convert(varchar(10),sum(产量)) as 合计__产品'''
select @sqlend_=''' from 产品生产物料采购计划 group by 材料,规格,单位 '''
select @sql1_=''
select @sql2_='select '
select @sql3_=''
select @sql4_=''select @sqlhead_1='''select distinct 材料='''''''',规格='''''''', 单位='''''''', 类别=''''产品规格'''',
'''''''' as 合计__产品'''
select @sqlend_1=''' from 产品生产物料采购计划 group by 材料,规格,单位 '''
select @sql1_1=''
select @sql2_1='select '
select @sql3_1=''
select @sql4_1=''print @i
while @i>=0
begin
select @ic=cast(@i as varchar),@i=@i-1
select @sql1='@'+@ic+' varchar(8000),'+@sql1
select @sql2=@sql2+'@'+@ic+'='''','
select @sql3='select @'+@ic+'=@'+@ic+'+a from # where gid='+@ic+char(13)+@sql3
select @sql4=@sql4+',@'+@ic select @sql1_='@_'+@ic+' varchar(8000),'+@sql1_
select @sql2_=@sql2_+'@_'+@ic+'='''','
select @sql3_='select @_'+@ic+'=@_'+@ic+'+b from # where gid='+@ic+char(13)+@sql3_
select @sql4_=@sql4_+',@_'+@ic
select @sql1_1='@_'+@ic+'1 varchar(8000),'+@sql1_1
select @sql2_1=@sql2_1+'@_'+@ic+'1='''','
select @sql3_1='select @_'+@ic+'1=@_'+@ic+'1 + c from # where gid='+@ic+char(13)+@sql3_1
select @sql4_1=@sql4_1+',@_'+@ic+'1 '
endselect @sql1='declare '+left(@sql1,len(@sql1)-1)+char(13)
select @sql2=left(@sql2,len(@sql2)-1)+char(13)
select @sql3=left(@sql3,len(@sql3)-1)
select @sql4=substring(@sql4,2,8000)select @sql1_='declare '+left(@sql1_,len(@sql1_)-1)+char(13)
select @sql2_=left(@sql2_,len(@sql2_)-1)+char(13)
select @sql3_=left(@sql3_,len(@sql3_)-1)
select @sql4_=substring(@sql4_,2,8000)select @sql1_1='declare '+left(@sql1_1,len(@sql1_1)-1)+char(13)
select @sql2_1=left(@sql2_1,len(@sql2_1)-1)+char(13)
select @sql3_1=left(@sql3_1,len(@sql3_1)-1)
select @sql4_1=substring(@sql4_1,2,8000)
--执行
exec(
@sql1_+@sql2_+@sql3_+'
'
+@sql1+@sql2+@sql3+'
'
+@sql1_1+@sql2_1+@sql3_1+'
exec('+@sqlhead_1+'+'+@sql4_1+'+'+@sqlend_1+'+'
+ @sqlhead_+'+'+@sql4_+'+'+@sqlend_+ ' + '
+@sqlhead+'+'+@sql4+'+'+@sqlend + ')'
)--删除临时表
drop table #
--*/
godrop TABLE BOM单
drop TABLE 产品生产计划
drop TABLE 产品生产物料采购计划/*
材料 规格 单位 类别 合计__产品 AA AB AC ...
----- ------- ---- -------- ---------- ---------- ---------- ---------- ----
产品规格 AA_ AB_ AC_ ...
产品产量 390.000000 5.000000 5.000000 5.000000 ...
a NULL NULL 计划消耗 780.000000 10.000000 10.000000 10.000000 ...
b NULL NULL 计划消耗 780.000000 10.000000 10.000000 10.000000 ...
c NULL NULL 计划消耗 780.000000 10.000000 10.000000 10.000000 ...*/
CREATE TABLE BOM单(产品 varchar(10),材料 varchar(10),消耗 decimal(28,6))
declare @i int
declare @J int
set @J = 0
set @i = 0
while @I < 4
begin
while @j < 26
begin
insert bom单 select char(65+@i)+char(65+@j),N'a',2
insert bom单 select char(65+@i)+char(65+@j),N'b',2
insert bom单 select char(65+@i)+char(65+@j),N'c',2
set @j = @J + 1
end
set @i = @i + 1
set @J = 0
end
go
CREATE TABLE 产品生产计划( 产品 varchar(10),产品规格 varchar(10),产量 decimal(28,6))
declare @ii int
declare @jj int
set @jj = 0
set @ii = 0
while @ii < 3
begin
while @jj < 26
begin
insert 产品生产计划 select char(65+@ii)+char(65+@jj),char(65+@ii)+char(65+@jj)+'_',5
set @jj = @jj + 1
end
set @ii = @ii + 1
set @jj = 0
end
goCREATE TABLE 产品生产物料采购计划( 产品 varchar(10),产品规格 varchar(10),产量 decimal(28,6),材料 varchar(60),规格 varchar(60),单位 varchar(4),消耗 decimal(28,6),计划消耗 decimal(28,6))
DECLARE @p产品 varchar(10)
DECLARE @p产品规格 varchar(10)
DECLARE @p产量 decimal(28,6)DECLARE cp_Cursor CURSOR FOR
select 产品,产品规格,产量 from 产品生产计划OPEN cp_Cursor
FETCH NEXT FROM cp_Cursor into @p产品,@p产品规格,@p产量WHILE @@FETCH_STATUS = 0
BEGIN
Insert Into 产品生产物料采购计划(产品,产品规格,产量,材料,消耗,计划消耗) select @p产品,@p产品规格,@p产量,bo.材料,bo.消耗,bo.消耗*@p产量 from bom单 bo where bo.产品=@p产品
FETCH NEXT FROM cp_Cursor into @p产品,@p产品规格,@p产量
END
CLOSE cp_Cursor
DEALLOCATE cp_Cursor
GOdeclare @sqlhead varchar(8000)
declare @sqlend varchar(8000)
declare @sql1 varchar(8000)
declare @sql2 varchar(8000)
declare @sql3 varchar(8000)
declare @sql4 varchar(8000)declare @sqlhead_ varchar(8000)
declare @sqlend_ varchar(8000)
declare @sql1_ varchar(8000)
declare @sql2_ varchar(8000)
declare @sql3_ varchar(8000)
declare @sql4_ varchar(8000)declare @sqlhead_1 varchar(8000)
declare @sqlend_1 varchar(8000)
declare @sql1_1 varchar(8000)
declare @sql2_1 varchar(8000)
declare @sql3_1 varchar(8000)
declare @sql4_1 varchar(8000)declare @i int
declare @ic varchar(20)--生成数据处理临时表
select id=identity(int,0,1),gid=0 ,a=',['+产品 +']=convert(varchar(10),sum(case 产品 when ''' +产品+''' then 计划消耗 else 0 end))'
,b=',['+产品 +']=convert(varchar(10),sum(case 产品 when ''' +产品+''' then 产量 else 0 end))',c=',['+产品 +']='''+产品规格+''''
into # from(select distinct 产品,产品规格 from 产品生产物料采购计划) a order by 产品select @i=max(len(a)) from #
print @i
set @i=7800/@iupdate # set gid=id/@i
select @i=max(gid) from #--生成数据处理语句
select @sqlhead=''' union all select 材料,规格, 单位, 类别=''''计划消耗'''',
convert(varchar(10),sum(计划消耗)) as 合计'''
select @sqlend=''' from 产品生产物料采购计划 group by 材料,规格,单位'''
select @sql1=''
select @sql2='select '
select @sql3=''
select @sql4=''select @sqlhead_=''' union all select distinct 材料='''''''',规格='''''''', 单位='''''''', 类别=''''产品产量'''',
convert(varchar(10),sum(产量)) as 合计__产品'''
select @sqlend_=''' from 产品生产物料采购计划 group by 材料,规格,单位 '''
select @sql1_=''
select @sql2_='select '
select @sql3_=''
select @sql4_=''select @sqlhead_1='''select distinct 材料='''''''',规格='''''''', 单位='''''''', 类别=''''产品规格'''',
'''''''' as 合计__产品'''
select @sqlend_1=''' from 产品生产物料采购计划 group by 材料,规格,单位 '''
select @sql1_1=''
select @sql2_1='select '
select @sql3_1=''
select @sql4_1=''print @i
while @i>=0
begin
select @ic=cast(@i as varchar),@i=@i-1
select @sql1='@'+@ic+' varchar(8000),'+@sql1
select @sql2=@sql2+'@'+@ic+'='''','
select @sql3='select @'+@ic+'=@'+@ic+'+a from # where gid='+@ic+char(13)+@sql3
select @sql4=@sql4+',@'+@ic select @sql1_='@_'+@ic+' varchar(8000),'+@sql1_
select @sql2_=@sql2_+'@_'+@ic+'='''','
select @sql3_='select @_'+@ic+'=@_'+@ic+'+b from # where gid='+@ic+char(13)+@sql3_
select @sql4_=@sql4_+',@_'+@ic
select @sql1_1='@_'+@ic+'1 varchar(8000),'+@sql1_1
select @sql2_1=@sql2_1+'@_'+@ic+'1='''','
select @sql3_1='select @_'+@ic+'1=@_'+@ic+'1 + c from # where gid='+@ic+char(13)+@sql3_1
select @sql4_1=@sql4_1+',@_'+@ic+'1 '
endselect @sql1='declare '+left(@sql1,len(@sql1)-1)+char(13)
select @sql2=left(@sql2,len(@sql2)-1)+char(13)
select @sql3=left(@sql3,len(@sql3)-1)
select @sql4=substring(@sql4,2,8000)select @sql1_='declare '+left(@sql1_,len(@sql1_)-1)+char(13)
select @sql2_=left(@sql2_,len(@sql2_)-1)+char(13)
select @sql3_=left(@sql3_,len(@sql3_)-1)
select @sql4_=substring(@sql4_,2,8000)select @sql1_1='declare '+left(@sql1_1,len(@sql1_1)-1)+char(13)
select @sql2_1=left(@sql2_1,len(@sql2_1)-1)+char(13)
select @sql3_1=left(@sql3_1,len(@sql3_1)-1)
select @sql4_1=substring(@sql4_1,2,8000)
--执行
exec(
@sql1_+@sql2_+@sql3_+'
'
+@sql1+@sql2+@sql3+'
'
+@sql1_1+@sql2_1+@sql3_1+'
exec('+@sqlhead_1+'+'+@sql4_1+'+'+@sqlend_1+'+'
+ @sqlhead_+'+'+@sql4_+'+'+@sqlend_+ ' + '
+@sqlhead+'+'+@sql4+'+'+@sqlend + ')'
)--删除临时表
drop table #
--*/
godrop TABLE BOM单
drop TABLE 产品生产计划
drop TABLE 产品生产物料采购计划/*
材料 规格 单位 类别 合计__产品 AA AB AC ...
----- ------- ---- -------- ---------- ---------- ---------- ---------- ----
产品规格 AA_ AB_ AC_ ...
产品产量 390.000000 5.000000 5.000000 5.000000 ...
a NULL NULL 计划消耗 780.000000 10.000000 10.000000 10.000000 ...
b NULL NULL 计划消耗 780.000000 10.000000 10.000000 10.000000 ...
c NULL NULL 计划消耗 780.000000 10.000000 10.000000 10.000000 ...*/
CREATE TABLE BOM单(产品 varchar(10),材料 varchar(10),消耗 decimal(28,6))
declare @i int
declare @J int
set @J = 0
set @i = 0
while @I < 4
begin
while @j < 26
begin
insert bom单 select char(65+@i)+char(65+@j),N'a',2
insert bom单 select char(65+@i)+char(65+@j),N'b',2
insert bom单 select char(65+@i)+char(65+@j),N'c',2
set @j = @J + 1
end
set @i = @i + 1
set @J = 0
end
go
CREATE TABLE 产品生产计划( 产品 varchar(10),产品规格 varchar(10),产量 decimal(28,6))
declare @ii int
declare @jj int
set @jj = 0
set @ii = 0
while @ii < 3
begin
while @jj < 26
begin
insert 产品生产计划 select char(65+@ii)+char(65+@jj),char(65+@ii)+char(65+@jj)+'_',5
set @jj = @jj + 1
end
set @ii = @ii + 1
set @jj = 0
end
goCREATE TABLE 产品生产物料采购计划( 产品 varchar(10),产品规格 varchar(10),产量 decimal(28,6),材料 varchar(60),规格 varchar(60),单位 varchar(4),消耗 decimal(28,6),计划消耗 decimal(28,6))
DECLARE @p产品 varchar(10)
DECLARE @p产品规格 varchar(10)
DECLARE @p产量 decimal(28,6)DECLARE cp_Cursor CURSOR FOR
select 产品,产品规格,产量 from 产品生产计划OPEN cp_Cursor
FETCH NEXT FROM cp_Cursor into @p产品,@p产品规格,@p产量WHILE @@FETCH_STATUS = 0
BEGIN
Insert Into 产品生产物料采购计划(产品,产品规格,产量,材料,消耗,计划消耗) select @p产品,@p产品规格,@p产量,bo.材料,bo.消耗,bo.消耗*@p产量 from bom单 bo where bo.产品=@p产品
FETCH NEXT FROM cp_Cursor into @p产品,@p产品规格,@p产量
END
CLOSE cp_Cursor
DEALLOCATE cp_Cursor
GOdeclare @sqlhead varchar(8000)
declare @sqlend varchar(8000)
declare @sql1 varchar(8000)
declare @sql2 varchar(8000)
declare @sql3 varchar(8000)
declare @sql4 varchar(8000)declare @sqlhead_ varchar(8000)
declare @sqlend_ varchar(8000)
declare @sql1_ varchar(8000)
declare @sql2_ varchar(8000)
declare @sql3_ varchar(8000)
declare @sql4_ varchar(8000)declare @sqlhead_1 varchar(8000)
declare @sqlend_1 varchar(8000)
declare @sql1_1 varchar(8000)
declare @sql2_1 varchar(8000)
declare @sql3_1 varchar(8000)
declare @sql4_1 varchar(8000)declare @i int
declare @ic varchar(20)--生成数据处理临时表
select id=identity(int,0,1),gid=0 ,a=',['+产品 +']=convert(varchar(10),sum(case 产品 when ''' +产品+''' then 计划消耗 else 0 end))'
,b=',['+产品 +']=convert(varchar(10),sum(case 产品 when ''' +产品+''' then 产量 else 0 end))',c=',['+产品 +']='''+产品规格+''''
into # from(select distinct 产品,产品规格 from 产品生产物料采购计划) a order by 产品select @i=max(len(a)) from #
print @i
set @i=7800/@iupdate # set gid=id/@i
select @i=max(gid) from #--生成数据处理语句
select @sqlhead=''' union all select 材料,规格, 单位, 类别=''''计划消耗'''',
convert(varchar(10),sum(计划消耗)) as 合计'''
select @sqlend=''' from 产品生产物料采购计划 group by 材料,规格,单位'''
select @sql1=''
select @sql2='select '
select @sql3=''
select @sql4=''select @sqlhead_=''' union all select distinct 材料='''''''',规格='''''''', 单位='''''''', 类别=''''产品产量'''',
convert(varchar(10),sum(产量)) as 合计__产品'''
select @sqlend_=''' from 产品生产物料采购计划 group by 材料,规格,单位 '''
select @sql1_=''
select @sql2_='select '
select @sql3_=''
select @sql4_=''select @sqlhead_1='''select distinct 材料='''''''',规格='''''''', 单位='''''''', 类别=''''产品规格'''',
'''''''' as 合计__产品'''
select @sqlend_1=''' from 产品生产物料采购计划 group by 材料,规格,单位 '''
select @sql1_1=''
select @sql2_1='select '
select @sql3_1=''
select @sql4_1=''print @i
while @i>=0
begin
select @ic=cast(@i as varchar),@i=@i-1
select @sql1='@'+@ic+' varchar(8000),'+@sql1
select @sql2=@sql2+'@'+@ic+'='''','
select @sql3='select @'+@ic+'=@'+@ic+'+a from # where gid='+@ic+char(13)+@sql3
select @sql4=@sql4+',@'+@ic select @sql1_='@_'+@ic+' varchar(8000),'+@sql1_
select @sql2_=@sql2_+'@_'+@ic+'='''','
select @sql3_='select @_'+@ic+'=@_'+@ic+'+b from # where gid='+@ic+char(13)+@sql3_
select @sql4_=@sql4_+',@_'+@ic
select @sql1_1='@_'+@ic+'1 varchar(8000),'+@sql1_1
select @sql2_1=@sql2_1+'@_'+@ic+'1='''','
select @sql3_1='select @_'+@ic+'1=@_'+@ic+'1 + c from # where gid='+@ic+char(13)+@sql3_1
select @sql4_1=@sql4_1+',@_'+@ic+'1 '
endselect @sql1='declare '+left(@sql1,len(@sql1)-1)+char(13)
select @sql2=left(@sql2,len(@sql2)-1)+char(13)
select @sql3=left(@sql3,len(@sql3)-1)
select @sql4=substring(@sql4,2,8000)select @sql1_='declare '+left(@sql1_,len(@sql1_)-1)+char(13)
select @sql2_=left(@sql2_,len(@sql2_)-1)+char(13)
select @sql3_=left(@sql3_,len(@sql3_)-1)
select @sql4_=substring(@sql4_,2,8000)select @sql1_1='declare '+left(@sql1_1,len(@sql1_1)-1)+char(13)
select @sql2_1=left(@sql2_1,len(@sql2_1)-1)+char(13)
select @sql3_1=left(@sql3_1,len(@sql3_1)-1)
select @sql4_1=substring(@sql4_1,2,8000)
--执行
exec(
@sql1_+@sql2_+@sql3_+'
'
+@sql1+@sql2+@sql3+'
'
+@sql1_1+@sql2_1+@sql3_1+'
exec('+@sqlhead_1+'+'+@sql4_1+'+'+@sqlend_1+'+'
+ @sqlhead_+'+'+@sql4_+'+'+@sqlend_+ ' + '
+@sqlhead+'+'+@sql4+'+'+@sqlend + ')'
)--删除临时表
drop table #
--*/
godrop TABLE BOM单
drop TABLE 产品生产计划
drop TABLE 产品生产物料采购计划/*
材料 规格 单位 类别 合计__产品 AA AB AC ...
----- ------- ---- -------- ---------- ---------- ---------- ---------- ----
产品规格 AA_ AB_ AC_ ...
产品产量 390.000000 5.000000 5.000000 5.000000 ...
a NULL NULL 计划消耗 780.000000 10.000000 10.000000 10.000000 ...
b NULL NULL 计划消耗 780.000000 10.000000 10.000000 10.000000 ...
c NULL NULL 计划消耗 780.000000 10.000000 10.000000 10.000000 ...*/