我需要使用SG =' All'来更新行。通过对这些行执行一些重新计算(例如,行的总和与SG!=' All'由G列分组)。 我尝试以下面的方式进行,但是我收到了一个错误:
WITH UpdateData as
(Select * from Tbl
where SG!='All')
update Tbl
Set Val =(select SUM(ROUND(ud.Val,2)) group by ud.G)
from UpdateData ud
where Tbl.SG='All' and ud.G = Tbl.G
Msg 164,Level 15,State 1,Line 6 每个GROUP BY表达式必须至少包含一个不是外部引用的列。
这是表格的样子:
G SG I Val
B All All 142.215
B T1 123 10.401
B T1 123 60.957
B T2 220 70.857
D All All 96.003
D T3 666 80.158
D T5 700 15.845
更新后,第一行的值应为: 选择ROUND(10.401,2)+ ROUND(60.957,2)+ ROUND(70.857,2)= 10.4 + 60.96 + 70.86 = 142.22而不是142.215 真实情况更复杂,我想避免重新计算所有行,所以我更喜欢做更新而不是删除和读取它们。非常感谢
答案 0 :(得分:1)
像这样工作。谢谢Mihai! 使用UpdateData作为 (从Tbl中选择* SG!='All')
update Tbl
Set Val =(select SUM(ROUND(ud.Val,2))
from UpdateData ud
where Tbl.SG='All' and ud.G = Tbl.G
group by ud.G)
where Tbl.SG='All'
答案 1 :(得分:0)
希望这会有用,
update Tbl
set Tbl.Val = = t.Value
from
(select SUM(ROUND(ud.Val,2)) as Value, ud.G
from UpdateData ud
where ud.G = Tbl.G
group by ud.G) as t
where Tbl.SG='All'