簡體   English   中英

通過另一個表中的列更新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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM