当前位置: 代码迷 >> Sql Server >> SQL server中关于表字段计算的有关问题,
  详细解决方案

SQL server中关于表字段计算的有关问题,

热度:71   发布时间:2016-04-24 08:47:46.0
SQL server中关于表字段计算的问题,,,
有表1,2,
表1中有字段 ID,FID,B,C,D; 表2中有字段ID,FID,a,b,c,d;
表1中的一个FID对应表2中一个或多个FID,例如
表1 FID      B     C       D   表2  FID         a        b       c        d
       1028                                    1028    0.2     10    20       50
                                                     1028   0.3      8      16       30
                                                     1028    0.5      20     25     60
   

表1中B,C,D,与表2中字段有如下关系
表1.D=表2.a*表2.d+表2.a*表2.d+......(表2中有几个跟表1FID对应的,表1中的D,就是几个a*d的乘机相加,即 0.2*50+0.3*30+0.5*60
表1.B=表2.b*(表2.a*表2.d/表1.D)。。。
即,表1.B=10*(0.2*50/(0.2*50+0.3*30+0.5*60))+8*(0.3*30/(0.2*50+0.3*30+0.5*60))+20*(0.5*60/(0.2*50+0.3*30+0.5*60))
表1.C=表2.c*(表2.a*表2.d/表1.D))。。。
即,表1.B=20*(0.2*50/(0.2*50+0.3*30+0.5*60))+16*(0.3*30/(0.2*50+0.3*30+0.5*60))+25*(0.5*60/(0.2*50+0.3*30+0.5*60))

公式看起来有点费事,其实不是很复杂,表1中的值是表2中加权值,而权重的计算又是依靠表2中的,a,d两个字段的值。。。


求教如何在SQL sever中实现,将表2 计算值填入表1中,,,,,,新手拜谢

------解决思路----------------------
;WITH t2_a AS (
    SELECT FID,
           SUM(a*d) AS d
      FROM 表2
  GROUP BY FID
)
UPDATE 表1
   SET 表1.D = t2_a.d
  FROM 表1, t2_a
 WHERE 表1.FID = t2_a.FID

;WITH t2_b AS (
    SELECT t2.FID,
           SUM(t2.b*(t2.a*t2.d/t1.d)) AS b,
           SUM(t2.c*(t2.a*t2.d/t1.d)) AS c
      FROM 表2 t2
      JOIN 表1 t1
        ON t1.FID = t2.FID
  GROUP BY FID

)
UPDATE 表1
   SET 表1.B = t2_b.b,
       表1.C = t2_b.c
  FROM 表1, t2_b
 WHERE 表1.FID = t2_b.FID

------解决思路----------------------
你以什么依据判断新记录?已知ID吧?
在t2_a、t2_b内部加上WHERE条件就可以。
  相关解决方案