簡體   English   中英

根據另一個表中所有先前日期的總和更新表中的字段

[英]Updating a field in a table based on the sum of all previous dates in another table

這是我這樣設置的兩個表的簡化版本:

Users (Name(varchar), DateAdded(date))
Costs (Month(date), TotalUsers(int))

現在,每當我插入,更新或刪除“用戶”表中的DateAdded時,我都想更新“成本”表中的相應行。 因此,如果我從2011年1月起刪除users表中的一行,則Costs表中具有Date值晚於2011年1月的日期值的所有行都需要減少其TotalUsers字段。 例如,在這種情況下,2011年2月和2011年3月的行需要減少其TotalUsers,而2010年12月的行則不需要。

基本上每當我更改Users中的一行時,我想更改成本中的每一行,以便其TotalUsers字段表示Users表中所有日期之前的總和。 我目前正在使用插入刪除設置觸發器,但我不確定在不使用游標的情況下更新成本表的最佳方法。

我建議您在用戶上創建一個視圖,這樣可以產生正確的月份,並且每次都會計數

Create View dbo.VCosts
with schemabinding
AS
SELECT MONTH(DateAdded) Month, COUNT_BIG(*) TotalUsers
From dbo.Users
Group by MONTH(DateAdded)

如果出於性能原因需要保留(存儲)數據,則可以創建一個INDEXED VIEW來實現該視圖。 它是自動維護的,因此您無需費心地使用觸發器。

create unique clustered index cix_VCosts on VCosts(Month)

如果“成本”表中還有其他列,則將這兩列保留在外,並按月加入此視圖以獲取數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM