簡體   English   中英

使用sql更新包含select查詢結果的現有列

[英]update existing column with results of select query using sql

我正在嘗試使用從SELECT語句獲得的結果更新Results表中名為Number_Of_Marks的列。 我們的select語句用於計算結果表中每個模塊的標記數。 SELECT語句有效,輸出正確,即

 ResultID   ModuleID   cnt
 -------------------------
   111      ART3452    2                                                          
   114      ART3452    2                                                         
   115      CSC3039    3                                                        
   112      CSC3039    3                                                        
   113      CSC3039    3 

使用的表格是:

結果: ResultID, ModuleID, Number_Of_Marks

我們需要將cnt的結果更新到我們的Number_Of_Marks列中。 這是我們的代碼......

DECLARE @cnt INT

SELECT @cnt

SELECT C.cnt
  FROM Results S
       INNER JOIN (SELECT ModuleID, count(ModuleID) as cnt
                     FROM Results 
                    GROUP BY ModuleID) C ON S.ModuleID = C.ModuleID

    UPDATE Results 
    SET [Number_Of_Marks] = (@cnt)

您可以使用update / join語法在SQL Server中執行此操作:

UPDATE s
  SET [Number_Of_Marks] = c.cnt
  FROM Results S INNER JOIN
       (SELECT ModuleID, count(ModuleID) as cnt
        FROM Results 
        GROUP BY ModuleID
       ) C
       ON S.ModuleID = C.ModuleID;

我假設你想要來自子查詢的計數,而不是來自未初始化的變量。

編輯:

一般來說,當您更改問題時,最好再提一個問題。 但有時,變化實際上很小。 修改后的查詢類似於:

UPDATE s
  SET [Number_Of_Marks] = c.cnt,
      Marks = avgmarks
  FROM Results S INNER JOIN
       (SELECT ModuleID, count(ModuleID) as cnt, avg(marks * 1.0) as avgmarks
        FROM Results 
        GROUP BY ModuleID
       ) C
       ON S.ModuleID = C.ModuleID;

請注意,我將marks乘以1.0 這是將整數轉換為數值的快速方法。 SQL Server取整數的平均值並生成一個整數。 通常你想要某種十進制或浮點值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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