![](/img/trans.png)
[英]Update table entry by taking sum from another table in SQL Server 2008 R2
[英]Update a table in SQL Server 2008 R2 by a column in another table and also need a sum value
我正在嘗試更新SQL Server 2008 R2中的表。
表格1:
id name value1
a 34 3
a 32 2
a - -
c 90 9
表2:
id
a
預期表1:
id name value1
a 34 3
a 32 2
a - 5
c 90 9
我需要按表2中存在的ID對所有value1組進行求和。
我的SQL查詢:
update table1
set value1 = cast(SUM(cast ([value1] as float)) as varchar(50))
GROUP BY id
where name = '-' and id in
(
select distinct id
from table2
)
我收到錯誤消息:
關鍵字“ GROUP”附近的語法不正確。
任何幫助,將不勝感激。
更新
update table1
set value1 = cast(SUM(cast ([value1] as float)) as varchar(50))
where name = '-' and id in
(
select distinct id
from table2
)
GROUP BY id
仍然:
Incorrect syntax near the keyword 'GROUP'.
您不能使用該構造afaik。 您需要一個子查詢來根據id計算值,並從該表進行update
:
UPDATE table1
SET value1 = SumTable.val
FROM (
SELECT T1.id, cast(SUM(cast (T1.[value1] as float)) as varchar(50)) as val
FROM table1 T1
WHERE T1.id in
(
select distinct T2.id
from table2 T2
)
GROUP BY T1.id
) AS SumTable
WHERE table1.id = SumTable.id
如果只想返回分組結果,可以通過運行以下命令來完成
SELECT ID, SUM(Value)
FROM Table1
WHERE ID IN (SELECT ID FROM Table2) GROUP BY ID
但是,如果要替換table1的內容,則沒有簡單的方法可以在單個操作中執行此操作。 在重新創建原始表之前,需要“緩存”中間結果:
DECLARE @TEMPTABLE TABLE (ID int, Value int);
INSERT INTO @TEMPTABLE SELECT ID, SUM(Value)
FROM Table1
WHERE ID IN (SELECT ID FROM Table2) GROUP BY ID
DROP TABLE Table1
SELECT * INTO Table1 FROM @TempTable
SELECT * FROM TABLE1
(請注意,這是您的第一次編輯)
如果只想向表中添加其他“求和”行,則應該能夠避免使用temp表,而應使用我首先作為子查詢提供的SELECT
語句來發出INSERT INTO
語句。
我確實認為您正在做的事情很奇怪,但是您可能想考慮一下您對表所做的事情。
強制轉換回VARCHAR也有點奇怪-如果它們始終是整數,請將其保留為整數。 如果它們是真正的VARCHARS,那么SUM並不總是有效
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.