我有一個表,其中有記錄,客戶購買資訊(表 a)。我想制作一個參考表(表 b),通過對表 a 進行計數來跟蹤每個人進行了多少購買。假設客戶 1 進行了 15 次購買,存盤在表 A 中,表 B 將包含客戶的姓名,然后顯示他們 15 次購買的計數。想知道解決這個問題的最佳方法。謝謝!
uj5u.com熱心網友回復:
將此資訊非規范化到單獨的表中是一個壞主意。您冒著更新例外的風險,并且需要撰寫復雜且低效的觸發代碼以使其保持最新狀態。
您可以為此創建一個視圖。您最好的選擇是索引視圖,服務器將為您維護并允許有效查詢。
索引視圖(與普通視圖相反)的主要限制是:
- 只允許內部連接,不允許應用或子查詢或派生表或 CTE。
- 允許分組,但
COUNT_BIG(*)必須包括在內,唯一允許的其他聚合是SUM - 必須是模式系結的(所有兩部分表參考,對基礎列沒有更改)
CREATE OR ALTER VIEW dbo.TotalPurchase
WITH SCHEMABINDING
AS
SELECT
p.CustomerId,
NumPurchases = COUNT_BIG(*),
PurchaseAmount = SUM(p.Amount)
FROM dbo.Purchase p
GROUP BY
p.CustomerId;
go
CREATE UNIQUE CLUSTERED INDEX IX_TotalPurchase
ON TotalPurchase (CustomerId)
WITH (DROP_EXISTING = ON);
您現在可以像查詢普通表一樣查詢該視圖,服務器將確保它實時保持最新狀態。
NOEXPAND出于各種原因,我確實建議在查詢時使用提示。
SELECT *
FROM TotalPurchase tp WITH (NOEXPAND);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/474584.html
上一篇:選擇符合所有動態id集的行
下一篇:視窗函式中的不同計數
