2009-10-06 63 views
1

我有3個表,每個表都會顯示用戶發佈消息的記錄。從3個表中總結數值

我已經設法總結了每個用戶在每個表上發佈消息的次數,現在我想將這3個單獨的值彙總到每個用戶。

這是我迄今管理:

表USERMESSAGE:
SELECT U.SenderID, COUNT(U.SenderID) AS U_NUM FROM USERMESSAGE AS U WHERE U.SenderID != U.ReceiverID GROUP BY U.SenderID

表註釋:
SELECT C.UserID, COUNT(C.UserID) AS C_NUM FROM COMMENT AS C GROUP BY C.UserID

表好友列表:
SELECT F.UserID, COUNT(F.UserID) AS F_NUM FROM FRIENDLIST AS F WHERE F.ListName = 'News Feed' GROUP BY F.UserID

但並不是所有的用戶將在所有標籤中發帖所以某些用戶ID不會出現在某些表中。

回答

0

我會嘗試這樣的事情

DECLARE @Table1 TABLE(
     UserID INT 
) 

DECLARE @Table2 TABLE(
     UserID INT 
) 

DECLARE @Table3 TABLE(
     UserID INT 
) 

INSERT INTO @Table1 (UserID) SELECT 1 
INSERT INTO @Table1 (UserID) SELECT 2 
INSERT INTO @Table1 (UserID) SELECT 3 

INSERT INTO @Table2 (UserID) SELECT 2 
INSERT INTO @Table2 (UserID) SELECT 3 

INSERT INTO @Table3 (UserID) SELECT 3 

SELECT ISNULL(CountTable1.CountUserIDTable1,0) + 
     ISNULL(CountTable2.CountUserIDTable2,0) + 
     ISNULL(CountTable3.CountUserIDTable3,0) CountOverTables, 
     UserIDs.UserID 
FROM (
      SELECT DISTINCT 
        UserID 
      FROM @Table1 
      UNION 
      SELECT DISTINCT 
        UserID 
      FROM @Table2 
      UNION 
      SELECT DISTINCT 
        UserID 
      FROM @Table3 
     ) UserIDs LEFT JOIN 
     (
      SELECT UserID, 
        COUNT(UserID) CountUserIDTable1 
      FROM @Table1 
      GROUP BY UserID 
     ) CountTable1 ON UserIDs.UserID = CountTable1.UserID LEFT JOIN 
     (
      SELECT UserID, 
        COUNT(UserID) CountUserIDTable2 
      FROM @Table2 
      GROUP BY UserID 
     ) CountTable2 ON UserIDs.UserID = CountTable2.UserID LEFT JOIN 
     (
      SELECT UserID, 
        COUNT(UserID) CountUserIDTable3 
      FROM @Table3 
      GROUP BY UserID 
     ) CountTable3 ON UserIDs.UserID = CountTable3.UserID 
+0

對不起11 附近有語法錯誤,我是SQL新手,我試圖修改你的代碼,但它對我來說太複雜了。 – 2009-10-06 07:52:43

+0

它的基本功能是在第一個子選擇中。獲取所有不同的用戶標識,這將允許您離開加入。然後剩下的3個子查詢得到每個表的總數。那麼您將不同的userids列表加入到3個表子查詢中,並將它們添加到一起。 – 2009-10-06 08:07:57

+0

好吧,它的工作。謝謝。 – 2009-10-08 04:35:53

2

SELECT用戶ID,SUM(NUM)爲總 FROM(SELECT AS U.SenderID用戶ID,COUNT(U.SenderID)AS NUM FROM USERMESSAGE爲u WHERE U.SenderID!= U.ReceiverID GROUP BY U.SenderID

UNION ALL 
SELECT C.UserID, COUNT(C.UserID) AS NUM FROM COMMENT AS C GROUP BY C.UserID 

UNION ALL 
SELECT F.UserID, COUNT(F.UserID) AS NUM FROM FRIENDLIST AS F WHERE F.ListName = 'News Feed' GROUP BY F.UserID 
) 
GROUP BY UserID 
+0

我得到這個錯誤味精'消息156,級別15,狀態1,行中的關鍵字「GROUP'.' – 2009-10-06 06:35:38