Я пишу процесс.Процесс подсчитывает случаи определенных действий в моей базе данных.Любые действия, которые есть в базе данных, но не используются, удаляются из базы данных:
-- make table variable of occurrences
DECLARE @occs TABLE(ActID int, Occurances int)
INSERT INTO @occs(ActID,Occurances)
(SELECT Activities.ActivityID, COUNT(Users.ActivityID) AS Occurances
FROM Users JOIN Activities ON Users.ActivityID = Activities.ActivityID
GROUP BY Activities.ActivityID)
-- Delete any activities that no one uses
DELETE FROM Activities WHERE ActivityId NOT IN (SELECT ActID FROM @occs)
Конечный результат (отображается на моем сайте) выглядит как система тегов StackOverflow - он отображает имякаждого вида деятельности, и количество людей, которые делают это действие.
Не все пользователи должны быть включены в число людей в каждом действии.Однако, если они являются единственным пользователем, выполняющим это действие, его не следует удалять.Итак, мне нужно снова заполнить таблицу вхождений, после выполнения предыдущего запроса:
INSERT INTO @occs(ActID,Occurances)
(SELECT Activities.ActivityID, COUNT(Users.ActivityID) AS Occurances
FROM Users
JOIN Activities ON Users.ActivityID = Activities.ActivityID
WHERE (Users.CountsTowardsActivityTotal = 1)
GROUP BY Activities.ActivityID)
Выводится именно эта версия таблицы @occs
:
-- return relevant results.
SELECT a2.ActivityID, a2.ActivityName, occs.Occurances
FROM
@occs occs JOIN Activities a2 on occs.ActID = a2.ActivityID
ORDER BY
a2.Activity
ИтакМне нужно удалить все строки из таблицы @occs
после ее первого заполнения и добавить новые данные.В качестве альтернативы, я мог бы создать новую табличную переменную (occs2
) и использовать ее вместо этого.
Что делать правильно?Это имеет значение?