日期:2014-05-18  浏览次数:20405 次

曾解决的问题现出现新问题,请marco08和mengmou及各位好手再帮看看
如下问题在
http://community.csdn.net/Expert/topic/5404/5404149.xml?temp=.3727991
得到mengmou和marco08的帮助本已解决,但现在出新情况,
就是MaInfo表会出现两个相同的记录时要把它们的值累加(如可口可乐),一旦出现这种情况目前的计算已不准确,小弟材疏,请大家再指点


--创建测试环境,假设下列表中的数据都已经按照公司、产品汇总,即公司、产品是主键。
create   table   Info(Code   int,IncDes   varchar(10))
create   table   MaInfo(Code   int,Barcode   varchar(10),MaterialsCn   varchar(10),number   int)
create   table   SaleDetail(Code   int,Barcode   varchar(10),MaterialsCn   varchar(10),sellnum1   int)
create   table   SaleOrder(Code   int,Barcode   varchar(10),MaterialsCn   varchar(10),sellnum2   int)

--插入测试数据
insert   Info(Code,IncDes)
select   '1009 ', '天染公司 '   union   all
select   '1005 ', '海丰公司 '   union   all
select   '1023 ', '采诗公司 '

insert   MaInfo(Code,Barcode,MaterialsCn,number)
select   '1009 ', '1111111 ', '可口可乐 ', '10 '   union   all
select   '1009 ', '1111111 ', '可口可乐 ', '10 '   union   all
select   '1009 ', '1111112 ', '芬达可乐 ', '12 '   union   all
select   '1009 ', '1111113 ', '花生果 ', '15 '   union   all
select   '1005 ', '1111112 ', '芬达可乐 ', '20 '   union   all
select   '1005 ', '1111114 ', '出前一丁 ', '30 '   union   all
select   '1023 ', '1111112 ', '芬达可乐 ', '22 '   union   all
select   '1005 ', '1111113 ', '花生果 ', '40 '

insert   SaleDetail(Code,Barcode,MaterialsCn,sellnum1)
select   '1009 ', '1111111 ', '可口可乐 ', '2 '   union   all
select   '1005 ', '1111114 ', '出前一丁 ', '3 '   union   all
select   '1023 ', '1111112 ', '芬达可乐 ', '1 '

insert   SaleOrder(Code,Barcode,MaterialsCn,sellnum2)
select   '1009 ', '1111111 ', '可口可乐 ', '2 '   union   all
select   '1023 ', '1111112 ', '芬达可乐 ', '1 '

--求解过程
declare   @ztdm   varchar(20)  
set   @ztdm   =   ' ' '1005 ' ', ' '1009 ' ' '
exec( '
declare   @sql   varchar(8000)
select   @sql   =   ' 'select   barcode,MaterialsCn   ' '


select   @sql   =   @sql   +   ' ',sum(case   when   IncDes   =   ' ' ' ' ' '   +   IncDes  
                        +   ' ' ' ' ' '   then   sellnum   else   0   end)   as   ' '   +   IncDes   +   ' '销量 ' '  
                        +   ' ',sum(case   when   IncDes   =   ' ' ' ' ' '   +   IncDes  
                        +   ' ' ' ' ' '   then   numbe