日期:2014-05-19  浏览次数:20518 次

请求一条生成合计值的Update语句?
DM(代码)             BT(标题)             JB(级别)SJDM(上级代码)       PF(得分)
00000001   1     测试仪技术性能指标 1 NULL ?
00000005   1.1   仪表品牌 2 00000001 1
00000023   1.2   显示屏及界面要求 2 00000001 2
00000024   1.3   文件存储 2 00000001 1
00000025   1.4   测试结果转储 2 00000001 2
00000026   1.5   电池 2 00000001 1
00000027   1.6   E1测试功能 2 00000001 ?
00000028   1.6.1   E1帧格式 3 00000027 2
00000029   1.6.2   E1时钟 3 00000027 1
00000030   1.6.3   E1测试图案 3 00000027 0.5
00000033   1.7   数据测试功能 2 00000001 ?
00000034   1.7.1   接口 3 00000033 1
00000035   1.7.2   接口速率 3 00000033 1.5
00000036   1.7.3   数据通讯 3 00000033 1
00000037   1.7.4   数据监视 3 00000033 2
00000002   2     数据误码测试仪技术其它 1 NULL ?
00000006   2.1   质量保证期 2 00000002 1
00000007   2.2   质量保证期后的维护 2 00000002 1
00000008   2.3   投标文件的完整性、 2 00000002 1
00000009   2.4   其他技术偏差 2 00000002 1

根据上述的表结构,要求写一条update语句更新小计值,如标题为1,1.6,1.7,   2的合计项,其合计分(PF)是根据本身下一级的合计值计算得出后直接填入。

------解决方案--------------------
update t1 set PF = (selecct sum(PF) from tablename where sjdm = t1.dm)
from tablename t1
where PF = '? ' --这里是筛选你需要更新数据的列

------解决方案--------------------
他的子應該是不止一層的。

另外,樓主,你的原始數據是怎樣的?是不是只有最底層的字節點的PF才有值?
------解决方案--------------------
update 表
set PF=(select sum(isnull(a.PF,0)) from 表 a where left(a.BT,charindex( '. ',a.BT)-1)=表.BT)
from 表
where len(BT)-len(replace(表.BT, '. ', ' '))=1
如果找最上级where charindex( '. ',表.BT)=0