如果您对此问题有更好的标题,请告诉我。感谢您提前了解。
表I在插入后需要更新总列
FK_Key Score Total
----------------------
121 1 NULL
121 5 NULL
121 7 NULL
我想要做的是通过查看分数值来更新Total
列:
FK_Key Score Total
-----------------------
121 1 1
121 5 6
121 7 13
我们假设在表中为同一个外键插入了一个新行:
121 6 19
每次发生新插入时,都应更新Total
列,汇总由FK分组的Score
列中的值 - 此处Score
为19即(1 + 5 + 7 + 6)
基本上我正在寻找一个更新语句,该语句通过Score列查看并更新每个FK的值。我不希望在所有FK的
中更新相同的值以下是要使用
的查询IF OBJECT_ID('tempdb..#Table1') IS NOT NULL
DROP TABLE #Table1
GO
CREATE TABLE #Table1
(
FK_Key INT,
Score INT NULL,
Total INT NULL,
)
INSERT INTO #Table1
VALUES (121, 1, NULL), (121, 5, NULL), (121, 7, NULL), (121, 6, NULL)
SELECT * FROM #Table1
预期结果
答案 0 :(得分:0)
正如我在评论中所述,我的建议是更改表结构以包含“Timestamp”类型列,以便您知道何时插入数据,否则,您无法保证具有完全相同的记录集每次运行查询时返回,然后创建视图以获取所需的数据。
您的解决方案如下:
CREATE TABLE #Table1
(
FK_Key INT
,Score INT NULL
,InsertTime DATETIME2 DEFAULT GETDATE()
)
INSERT INTO
#Table1 (FK_Key, Score)
VALUES
(121, 1), (121, 5), (121, 7), (121, 6)
SELECT
FK_Key
,Score
-- ,InsertTime
,SUM(Score) OVER (PARTITION BY FK_Key ORDER BY InsertTime ROWS UNBOUNDED PRECEDING) AS Total
FROM
#Table1
显然,最后一个查询可以存储为视图。
这样可以获得一致的结果,并且还可以处理删除行之后的情况,这会导致当前运行的总逻辑陷入混乱。
希望有意义/有帮助。