计算SQL中选定ID的列总和

计算SQL中选定ID的列总和,sql,sql-server,sql-server-2008,tsql,sql-scripts,Sql,Sql Server,Sql Server 2008,Tsql,Sql Scripts,这些是我的桌子: 会员:Id,积分 CartRegister:Id,成员Id,CartId,RegisterDate,Point SelectetMembers:Id,Member\u Id 会员可以在cartrester和Member中注册购物车。积分必须计算并插入会员获得的所有积分。因此,我需要计算每个SelectedMembers的所有点,并更新Member表,但我不知道如何实现它 我脑子里有以下脚本: UPDATE [Member] SET [Points]= (

这些是我的桌子:

  • 会员
    Id,积分
  • CartRegister
    Id,成员Id,CartId,RegisterDate,Point
  • SelectetMembers
    Id,Member\u Id
会员可以在
cartrester
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  )
因此,如果我使用where子句,我会对
selectsum(Point)
中的where子句感到困惑

        WHERE [CR].[Member_Id] IN ( Select Member_Id From SelectedMembers  )
然后所有成员的总和与所有成员的总和相同点,也许我需要类似于
foreach
的东西,您的建议是什么?

您可以使用CTE(公共表表达式)首先计算每个成员的点,然后使用该信息更新
成员
表:

-- 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
上的一个变体基本相同,只是使用了稍微不同的语法:

WITH aggregated AS (
  SELECT
    *,
    AllPoints = SUM(Point) OVER (PARTITION BY Member_ID)
  FROM CartRegister
  WHERE Member_ID IN (SELECT ID FROM SelectedMembers)
)
UPDATE aggregated
SET Points = AllPoints
选中此项:

UPDATE [Member]
SET [Points]=
(
   SELECT SUM([CR].[Point]) AS [AllPoints]
   FROM  [CartRegister] AS [CR] 
   WHERE [CR].[Member_Id] = [Member].[Id]

)
WHERE [Members].[Member].[Id] IN  ( SELECT Member_Id From SelectedMembers  )

我相信应该是
WHERE[CR].[Member_Id]=[Member].Id
@NikolaMarkovinović谢谢你的答案是正确的,你能把它写下来作为答案吗,我可以接受。