有表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条件就可以。