2

我正在尝试返回所有使用过语音会议的 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 吗?非常感谢任何帮助!

4

1 回答 1

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

编辑:固定别名,将 ALL 添加到 UNION

于 2012-01-20T20:42:41.930 回答