我正在尝试使用从Number_Of_Marks
语句中获得的结果更新Results
表中名为SELECT
的列。我们的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)
答案 0 :(得分:4)
您可以使用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取整数的平均值并生成一个整数。通常你想要某种十进制或浮动值。