SQL联合COUNT()函数未返回预期结果

时间:2012-01-20 20:37:46

标签: sql count union lync

我正在尝试返回使用语音会议的所有MSFT Lync用户及其使用过的次数。我必须使用UNION,因为该表具有User1和User2,他们都参与了我想要的会议。

这是SQL:

SELECT U.UserUri,
       COUNT(U.UserUri) AS COUNT
FROM   SessionDetails AS S
       INNER JOIN Users U
         ON S.User1Id = U.UserId
WHERE  MediaTypes = 48
GROUP  BY U.UserUri
UNION
SELECT U.UserUri,
       COUNT(U.UserUri) AS COUNT
FROM   SessionDetails AS S
       INNER JOIN Users U
         ON S.User2Id = U.UserId
WHERE  MediaTypes = 48
GROUP  BY U.UserUri  

返回的结果是参与多个会议的人在列表中出现两次,有两个计数总计。实际上,在输入后,必须按User1Id和User2ID进行分组。如果一个人有9个对话,但只有6个会话,他们将是User1 6次,User2 3次,创建两个不同的分组。

现在我知道为什么,但任何想法如何返回没有重复的UserUri?任何帮助非常感谢!

1 个答案:

答案 0 :(得分:5)

在UNION之后进行聚合吗?

SELECT
    T.UserUri, COUNT(*)
FROM
    (
    SELECT U.UserUri
    FROM   SessionDetails AS S
           INNER JOIN Users U
             ON S.User1Id = U.UserId
    WHERE  MediaTypes = 48
    UNION ALL
    SELECT U.UserUri
    FROM   SessionDetails AS S
           INNER JOIN Users U
             ON S.User2Id = U.UserId
    WHERE  MediaTypes = 48
    ) T
GROUP BY 
   T.UserUri

编辑:修复别名,将所有内容添加到UNION