6

これらは私のテーブルです:

  • メンバー:Id, Points
  • カート登録:Id, Member_Id, CartId, RegisterDate, Point
  • SelectetMembers :Id, Member_Id

メンバーは にカートを登録でき、メンバーが獲得CartRegisterMember.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  )

したがって、Select Sum(Point)使用する場合、where句が何であるかについて混乱しています

        WHERE [CR].[Member_Id] IN ( Select Member_Id From SelectedMembers  )

次に、すべてのメンバーの合計がすべてのメンバーポイントの合計と同じになるようにします。おそらく次のようなものが必要foreachです。あなたの提案は何ですか?

4

3 に答える 3

7

CTE (Common Table Expression) を使用して、最初に各メンバーのポイントを計算し、その情報を使用して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
于 2012-04-23T10:42:13.317 に答える
0

@marc_sのソリューションのバリエーションは、基本的に同じですが、わずかに異なる構文のみを使用します。

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
于 2012-04-23T11:07:23.920 に答える
0

これをチェックして:

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  )
于 2012-04-23T11:29:34.633 に答える