Sae*_*eid 6 sql t-sql sql-server sql-scripts sql-server-2008
这些是我的表:
Id, PointsId, Member_Id, CartId, RegisterDate, PointId, Member_Id会员可以在其中注册购物车CartRegister,并且Member.Points必须计算和插入会员所赚取的所有积分.所以我需要计算每个点的所有点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 )
Run Code Online (Sandbox Code Playgroud)
所以我很困惑Select Sum(Point)如果我使用的是where子句
WHERE [CR].[Member_Id] IN ( Select Member_Id From SelectedMembers )
Run Code Online (Sandbox Code Playgroud)
然后所有成员的总和相同于所有成员点的总和,也许我需要一些像foreach你的建议是什么?
您可以使用CTE(公用表表达式)首先计算每个成员的点数,然后使用该更改来更新Members表:
-- 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
Run Code Online (Sandbox Code Playgroud)
检查一下:
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 )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
438 次 |
| 最近记录: |