Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 对3个表中的值求和_Sql_Sql Server 2005 - Fatal编程技术网

Sql 对3个表中的值求和

Sql 对3个表中的值求和,sql,sql-server-2005,Sql,Sql Server 2005,我有3个表,每个表将显示用户发布消息的记录 我已经设法计算出每个用户在每个表上发布消息的次数,现在我想为每个用户将这3个单独的值相加 以下是我迄今为止所做的工作: 表USERMESSAGE: 选择U.SenderID,将COUNTU.SenderID作为U\U NUM 从USERMESSAGE作为U 你在哪里美国破产管理人 按U.SenderID分组 UNION ALL SELECT C.UserID, COUNT(C.UserID) AS NUM FROM COMMENT AS C GROUP

我有3个表,每个表将显示用户发布消息的记录

我已经设法计算出每个用户在每个表上发布消息的次数,现在我想为每个用户将这3个单独的值相加

以下是我迄今为止所做的工作:

表USERMESSAGE: 选择U.SenderID,将COUNTU.SenderID作为U\U NUM 从USERMESSAGE作为U 你在哪里美国破产管理人 按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
表注释: 选择C.UserID,COUNTC.UserID作为C_NUM 从注释中选择C 按C.UserID分组

表1: 选择F.UserID,COUNTF.UserID作为F_NUM 从好友列表中选择F 其中F.ListName='News Feed' 按F.UserID分组


但并非所有用户都会在所有表中发布,因此某些用户ID不会出现在某些表中

选择UserID,SUM NUM作为总计 从…起 选择U.SenderID作为用户ID,从USERMESSAGE中选择COUNTU.SenderID作为NUM作为U,其中U.SenderID!=U.SenderID的U.ReceiverID组

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

我想试试这样的

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

我收到这个错误消息msg 156,级别15,状态1,第11行关键字“GROUP”附近的语法不正确。对不起,我是SQL新手,我尝试过修改您的代码,但它对我来说太复杂了。它基本上是在第一个子选择中执行的。获取所有不同的用户标识,这将允许您左键加入。然后,剩下的3个子查询将获取每个表的总计。然后将用户标识的不同列表连接到3个表子查询中,并将它们添加到一起。