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