我在WebApp上工作,其中包含以下表格:
CREATE TABLE Store
(
[Name_of_Store], [Number_of_Ratings_Received] TINYINT, [Average_Rating] TINYINT,
)
;
CREATE TABLE Employee
(
[Name_of_Employee] ,[Number_of_Ratings_Received] TINYINT, [Average_Rating] TINYINT,
)
;
CREATE TABLE Rating
(
[Rating_for_Employee_out_of_Ten] TINYINT, [Rating_for_Store_out_of_Ten] TINYINT,
)
;
为了论证,这些表包含以下数据:
INSERT INTO Store
([Name_of_Store], [Average_Rating], [Number_of_Ratings_Received])
VALUES
('Med', '5', '1'),
('Chem', '4', '3'),
;
INSERT INTO Employee
([Name_of_Employee], [Average_Rating], [Number_of_Ratings_Received])
VALUES
('John', '5', '1'),
('Stephen', '1', '8'),
;
假设有主键和外键相应地链接表。 Web应用程序更新了评级表,但后来我需要评级表(使用它与Store和Employee表的主键相对应的外键)来触发Store和Employee表中的评级字段。例如,每次“员工”#39;对商店评分,我需要包含在' Number_of_Ratings_Received'该特定商店的字段增加1和“Average_Rating”#39;字段进行相应调整。
请记住,这是我观看教程视频后的第一次尝试。我只是无法正确使用语法。到目前为止,我有:
GO
CREATE TRIGGER NumberOfRatingsReceived1 AFTER INSERT ON Store
BEGIN
UPDATE Store SET Number_of_Ratings_Received = AUTO_INCREMENT
END
GO
CREATE TRIGGER NumberOfRatingsReceived2 AFTER INSERT ON Employee
BEGIN
UPDATE Employee SET Number_of_Ratings_Received = AUTO_INCREMENT
END
我努力让自动增量工作,更不用说平均计算。请帮助或指出我正确的方向。
答案 0 :(得分:2)
我建议不要存储评分数和平均数。而是创建一个类似于以下的视图来动态计算信息,而不是在模型中内置数据重复。
CREATE VIEW StoreWithStatistics AS
SELECT s.*,
COUNT(r.StoreRating) OVER (PARTITION BY s.StoreID) AS Number_of_Ratings_Recieved,
AVG(r.Rating_for_Store_out_of_Ten) OVER (PARTITION BY s.StoreID) AS Average_Rating
FROM STORE s
LEFT JOIN Rating r on s.StoreID = r.StoreID
答案 1 :(得分:1)
AUTO_INCREMENT
中没有SQL Server
。我相信你想在Rating
表更新store
和Employee
表上插入后说出来。所以改变你的触发器体如下面
CREATE TRIGGER NumberOfRatingsReceived1
AFTER INSERT ON Rating
BEGIN
UPDATE Store
SET Number_of_Ratings_Received = Number_of_Ratings_Received + 1
WHERE <condition>;
END