sql - 计算 SQL 中选定 ID 的列总和

标签 sql sql-server sql-server-2008 tsql sql-scripts

这些是我的表:

  • 成员(member) :Id, Points
  • 购物车注册 :Id, Member_Id, CartId, RegisterDate, Point
  • SelectetMembers :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/

    相关文章:

    c# - 十六进制值字符串到 varbinary SQL Server 2008

    sql-server - SDAC -RecordCount 和 FetchAll

    SQLServer 子查询单元作为列

    SQL ERD-主键出现两次

    sql - 如何在 SQL Server 中通过 GROUP BY 使用 SUM?

    sql - 选择非空列

    sql - 表类型存储在 sql server 中的什么位置?我们如何改变它?

    sql - Oracle PL/SQL 触发器 : Reset column value automatically after an update statement

    java - Hibernate SQL 查询结果映射/转换为对象/类/Bean

    mysql - 显示时间间隔的唯一记录