Имеют две таблицы в базе данных SQL Server. Таблица №1 ClassicsRatings
имеет RatingID
, в качестве ключа, TitleID
, Rating
и Comment
. Таблица №2, AVGRating
, имеет TitleID
, в качестве ключа, AvgRating
и Count
.Таблица SQL Server1 UPDATE Таблица2
Следующая таблица обновления запроса # 2, когда запрос первоначально работать на таблицу № 1:
INSERT INTO AVGRating
SELECT TitleID, Count(*) AS Count, AVG(Rating) AS AvgRating
FROM ClassicsRatings
GROUP BY TitleID
ORDER BY TitleID
Моей проблема: как получить таблицу № 2 для обновления, когда последующие вставки сделаны в таблице № 1 , Я попытался MERGE
и UPDATE
следующим образом:
MERGE AVGRating AS AR
USING (SELECT TitleID, COUNT(*) AS Count, AVG(Rating) AS AvgRating
FROM ClassicsRatings
GROUP BY RecipeID) AS ClassicsRatings(RecipeID, Count, AvgRating)
ON
(
AR.RecipeID = ClassicsRatings.RecipeID
)
WHEN NOT MATCHED THEN
INSERT (RecipeID, Count, AvgRating)
VALUES (ClassicsRatings.RecipeID, ClassicsRatings.Count, ClassicsRatings.AvgRating)
WHEN MATCHED THEN
UPDATE
SET AR.Count = ClassicsRatings.Count,
AR.AvgARating = ClassicsRatings.AvgRating;
UPDATE AVGRating
SET
AVGRating.TitleID = ClassicsRatings.TitleID,
AVGRating.AvgRating = ClassicsRatings.AvgRating,
AVGRating.Count = ClassicsRatings.Count
FROM AVGRating
INNER JOIN ClassicsRatings ON
AVGRating.TitleID = ClassicsRatings.TitleID
WHERE TitleID = TitleID
То, что я не могу сделать это случиться, чтобы вставить в таблицу 1 и иметь таблицу 2 отражают эту вставку. Любая помощь будет оценена по достоинству.
Я также использовал следующий триггер без результата:
CREATE TRIGGER AVGRatingTrigger
ON ClassicsRatings
AFTER INSERT AS
DECLARE @TitleID INT
DECLARE @Count INT
DECLARE @RatingAVG INT
BEGIN
UPDATE AVGRatings
WHERE AVGRatings.TitleID = ClassicsRatings.TitleID
END
Спусковой было изменено на:
CREATE TRIGGER AVGRatingTrigger
ON ClassicsRatings
AFTER INSERT AS
BEGIN
UPDATE A
SET A.TitleID = I.TitleID,
A.Count = I.Count,
A.AvgRating = I.AvgRating
FROM AVGRating as A
INNER JOIN INSERTED as I ON A.TitelID = I.TitleID
END
Я не получил сообщение об ошибке с курком, однако, когда я вставляю новый рейтинг в ClassicRatings, я получаю сообщение об ошибке «Invalid object AvgRating». Похоже, что AvgRating часть AVG (Рейтинг) AS AvgRating в таблице AVGRating не распознается триггером (исходный запрос распознает AvgRating). Я думаю, это будет означать, что, поскольку ClassicsRatings на самом деле не имеет AvgRating, но выполняет расчет/агрегат и заполняет таблицу AVGRating вычислением конфликта. Я пробовал в течение двух дней, чтобы заставить это работать. Моя проблема, похоже, в A.Count = I.Count A.AvgRating = I.AvgRating, потому что граф в таблице ClassicsRatings на самом деле COUNT (*) - не поле в ClassicsRatings, а AvgRating действительно AVG (Rating) - not поле в ClassicsRatings. Любая помощь будет принята с благодарностью.
Благодарим вас за ответ. См. Редактирование, которое я сделал в своем первоначальном сообщении. Спасибо. – user1830924
Большое спасибо Петар. Я думаю, я могу получить это отсюда. – user1830924
Петар, я был неправ, я не понимаю. Если вы посмотрите на редактирование, которое я сделал выше, и если вы поймете мое редактирование, я буду признателен за любую помощь, которую вы могли бы мне дать. Большое спасибо. – user1830924