写个大概,可能细节不对。
1:
create function fmerg1
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str='('
select @str=@str+'+'+cast(bbb as varchar) from 表1
set @str=right(@str,len(@str)-1)+')'
return(@str)
End
go
2:
create function fmerg2(@a as varchar)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str='('
select @str=@str+'+'+cast(eee as varchar) from 表2
set @str=right(@str,len(@str)-1)+')'
return(@str)
End
go3:
Select distinct ddd,e+'*('+(select bbb from 表1 where aaa = tmp.ccc and aaa = 'a1')+')'+dbo.fmerg1()+')/'+dbo.fmerg2(ccc) as a1,
ddd,e+'*('+(select bbb from 表1 where aaa = tmp.ccc and aaa = 'a2')+')'+dbo.fmerg1()+')/'+dbo.fmerg2(ccc) as a2
from 表2 tmp

解决方案 »

  1.   

    fff   a1                    a2
    b1    4*(2/(2+3))/(4+5)    6*(3/(2+3))/(6+7)
    b2    5*(2/(2+3))/(4+5)    7*(3/(2+3))/(6+7)
    -->a1,a2都是计算列!为了方便理解,我写成了表达式的样子!不是字符串合并!
      

  2.   


    select b.ddd fff,
      sum(case when a.aaa='a1' then eee end)*  (sum(case when a.aaa='a1' then bbb end)/sum(bbb))/sum(eee) a1,
      sum(case when a.aaa='a2' then eee end)*  (sum(case when a.aaa='a2' then bbb end)/sum(bbb))/sum(eee) a2
     from b,a where a.aaa=b.ccc group by ddd