私はprocを書いています。 procは、データベース内の特定のアクティビティの発生をカウントします。データベース内にあるが、使用されていない任意の活動は、データベースから削除されていますテーブル変数から削除するか、新しい変数を作成しますか?
-- 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のタグのsytemのように見える - それは、それぞれの名前が表示されます活動、その活動を行っている人の数。
すべてのユーザーを各アクティビティの人数に含める必要はありません。ただし、そのユーザーがそのアクティビティを実行している唯一のユーザーであれば、そのアクティビティを削除しないでください。
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
テーブルのこのバージョンです:以前のクエリを実行した後、だから、私は、再びoccurancesテーブルを移入する必要がありますので
-- 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
)を作成し、その代わりに使用することができます。
正しいことは何ですか。違いはありますか?
ありがとうございます。気づいたことがあるかもしれませんが、私はSQLにあまり慣れていません。 – Oliver