You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对Service-Based Database表中列求和并写入同表另一列

问题描述

我是编程新手,已创建Service-Based Database用于存储数据,现有一张gametable表,结构及数据如下:

gamepricegamedescgametotal
60RDR2
40R6S

我需要将gameprice列的数值求和后写入gametotal列,且当新增游戏数据时,该总和能自动更新。目前我尝试了SQL语句:

Select Sum(gameprice) as gametotal From gametable

期望达到如下效果:

新增数据前:

gamepricegamedescgametotal
60RDR2100
40R6S

新增一条gameprice=60,gamedesc=DyingL2的数据后:

gamepricegamedescgametotal
60RDR2160
40R6S
60DyingL2
解决方案

针对你的需求,在SQL Server(Service-Based Database一般指SQL Server本地数据库)中,有两种常用方法实现自动维护总和:

方法1:使用计算列(推荐)

如果希望gametotal列自动计算且无需手动维护,可以创建基于标量函数的计算列,每次数据变更时自动更新总和:

  1. 创建计算总和的标量函数:
CREATE FUNCTION dbo.GetTotalGamePrice()
RETURNS INT
AS
BEGIN
    RETURN (SELECT SUM(gameprice) FROM gametable)
END
  1. 修改表结构添加计算列(若gametotal已存在,先删除再添加):
-- 若gametotal列已存在,执行删除
ALTER TABLE gametable DROP COLUMN gametotal;

-- 添加自动计算总和的列
ALTER TABLE gametable ADD gametotal AS dbo.GetTotalGamePrice();

此后查询表时,gametotal列会自动显示当前gameprice的总和,新增/删除/修改数据时会实时更新。

方法2:使用触发器

如果仅需要在特定行存储总和,可通过触发器实现数据变更时自动更新指定行的总和:

  1. 创建INSERT触发器:
CREATE TRIGGER trg_UpdateGameTotal
ON gametable
AFTER INSERT
AS
BEGIN
    DECLARE @total INT;
    SELECT @total = SUM(gameprice) FROM gametable;

    -- 更新指定行的gametotal,这里以gamedesc='RDR2'为例,可按需调整
    UPDATE gametable
    SET gametotal = @total
    WHERE gamedesc = 'RDR2';
END
  1. 初始化当前总和:
DECLARE @initialTotal INT;
SELECT @initialTotal = SUM(gameprice) FROM gametable;

UPDATE gametable
SET gametotal = @initialTotal
WHERE gamedesc = 'RDR2';

此后每次新增数据,触发器会自动计算总和并更新指定行的gametotal。

额外建议

如果仅需查询时展示总和,无需将总和存储在表中,直接使用以下查询即可,避免数据冗余:

SELECT 
    gameprice, 
    gamedesc, 
    CASE WHEN gamedesc = 'RDR2' THEN (SELECT SUM(gameprice) FROM gametable) ELSE '' END AS gametotal
FROM gametable;

内容的提问来源于stack exchange,提问作者user19541730

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:15:42