这些是我的表:
Id, Points
Id, Member_Id, CartId, RegisterDate, Point
Id, Member_Id
成员(member)可以在
CartRegister
注册购物车,并在 Member.Points
必须计算并插入成员(member)获得的所有积分。所以我需要计算每个 SelectedMembers
的所有点并更新 Member
表,但我不知道如何实现它。以下脚本在我的脑海中:
UPDATE [Member]
SET [Points]=
(
SELECT SUM([CR].[Point]) AS [AllPoints]
FROM [CartRegister] AS [CR]
WHERE [CR].[Member_Id] = --???
)
WHERE [Members].[Member].[Id] IN ( SELECT Member_Id From SelectedMembers )
所以我对
Select Sum(Point)
中的 where 子句感到困惑如果我使用 WHERE [CR].[Member_Id] IN ( Select Member_Id From SelectedMembers )
然后所有成员(member)的总和与所有成员(member)积分的总和相同,也许我需要类似
foreach
的东西你的建议是什么?
最佳答案
您可以使用 CTE(通用表表达式)首先计算每个成员的点数,然后使用该信息更新 Members
table :
-- this CTE takes all selected members, and calculates their total of points
;WITH MemberPoints AS
(
SELECT
Member_ID,
AllPoints = SUM(Point)
FROM
CartRegister
WHERE
Member_ID IN (SELECT ID FROM SelectedMembers)
GROUP BY
Member_ID
)
UPDATE dbo.Member
SET Points = mp.AllPoints
FROM MemberPoints mp
WHERE dbo.Member.Member_ID = mp.Member_ID
关于sql - 计算 SQL 中选定 ID 的列总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10278924/